1. Table of Contents


1.1 Sample Data


The JobHiring dataset obtained from the Statistics By Jim website by Jim Frost was used for this illustrated example.

Preliminary dataset assessment:

[A] 50 rows (observations)

[B] 12 columns (variables)
     [B.1] 12/12 descriptors = 12/12 ordered category
            [B.1.1] ACAD (Academic Record)
            [B.1.2] APPR (Appearance)
            [B.1.3] COMM (Communication)
            [B.1.4] CFIT (Company Fit)
            [B.1.5] EXPR (Experience)
            [B.1.6] JFIT (Job Fit)
            [B.1.7] LETT (Cover Letter)
            [B.1.8] LIKE (Likeability)
            [B.1.9] ORGN (Organization)
            [B.1.10] POTL (Potential)
            [B.1.11] RESM (Resume)
            [B.1.12] SCON (Self-Confidence)

Code Chunk | Output
##################################
# Loading R libraries
##################################
library(AppliedPredictiveModeling)
library(performance)
library(parameters)
library(HH)
library(tidyr)
library(caret)
library(psych)
library(lattice)
library(dplyr)
library(moments)
library(skimr)
library(RANN)
library(pls)
library(corrplot)
library(lares)
library(DMwR)
library(gridExtra)
library(rattle)
library(RColorBrewer)
library(stats)
library(factoextra)
library(FactoMineR)
library(gplots)
library(qgraph)
library(ggplot2)
library(psych)
library(nFactors)
library(MBESS)
library(DandEFA)
library(EFAtools)

##################################
# Loading source and
# formulating the analysis set
##################################
JobHiring <- read.csv("JobHiring.csv",
                   na.strings=c("NA","NaN"," ",""),
                   stringsAsFactors = FALSE)
JobHiring <- as.data.frame(JobHiring)

##################################
# Performing a general exploration of the data set
##################################
dim(JobHiring)
## [1] 50 12
str(JobHiring)
## 'data.frame':    50 obs. of  12 variables:
##  $ ACAD: int  6 9 6 7 4 7 6 7 9 6 ...
##  $ APPR: int  8 8 7 8 7 7 8 6 8 8 ...
##  $ COMM: int  7 8 7 6 8 7 6 6 8 7 ...
##  $ CFIT: int  5 8 6 5 6 5 7 5 9 8 ...
##  $ EXPR: int  6 10 6 8 6 5 7 8 9 6 ...
##  $ JFIT: int  5 9 7 5 6 6 7 6 8 7 ...
##  $ LETT: int  7 8 7 9 6 5 8 7 10 8 ...
##  $ LIKE: int  7 9 8 8 7 7 7 6 7 7 ...
##  $ ORGN: int  7 8 8 7 8 8 5 5 8 8 ...
##  $ POTL: int  6 9 6 8 5 7 7 7 8 6 ...
##  $ RESM: int  7 9 6 7 4 4 8 6 9 7 ...
##  $ SCON: int  7 9 8 7 6 6 7 6 8 7 ...
summary(JobHiring)
##       ACAD            APPR            COMM            CFIT      
##  Min.   : 4.00   Min.   : 5.00   Min.   : 3.00   Min.   : 3.00  
##  1st Qu.: 6.25   1st Qu.: 7.00   1st Qu.: 6.00   1st Qu.: 6.00  
##  Median : 7.00   Median : 7.50   Median : 7.00   Median : 7.00  
##  Mean   : 7.40   Mean   : 7.44   Mean   : 6.86   Mean   : 6.88  
##  3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.: 8.00  
##  Max.   :10.00   Max.   :10.00   Max.   :10.00   Max.   :10.00  
##       EXPR            JFIT            LETT            LIKE           ORGN     
##  Min.   : 5.00   Min.   : 3.00   Min.   : 4.00   Min.   :4.00   Min.   :3.00  
##  1st Qu.: 6.00   1st Qu.: 6.00   1st Qu.: 6.00   1st Qu.:7.00   1st Qu.:5.25  
##  Median : 7.00   Median : 7.00   Median : 7.00   Median :7.50   Median :7.00  
##  Mean   : 7.32   Mean   : 7.02   Mean   : 7.22   Mean   :7.38   Mean   :6.86  
##  3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.:8.00   3rd Qu.:8.00  
##  Max.   :10.00   Max.   :10.00   Max.   :10.00   Max.   :9.00   Max.   :9.00  
##       POTL           RESM            SCON     
##  Min.   : 4.0   Min.   : 4.00   Min.   :5.00  
##  1st Qu.: 6.0   1st Qu.: 6.00   1st Qu.:7.00  
##  Median : 7.5   Median : 7.00   Median :7.00  
##  Mean   : 7.3   Mean   : 7.24   Mean   :7.34  
##  3rd Qu.: 8.0   3rd Qu.: 9.00   3rd Qu.:8.00  
##  Max.   :10.0   Max.   :10.00   Max.   :9.00
##################################
# Formulating a data type assessment summary
##################################
PDA <- JobHiring
(PDA.Summary <- data.frame(
  Column.Index=c(1:length(names(PDA))),
  Column.Name= names(PDA), 
  Column.Type=sapply(PDA, function(x) class(x)), 
  row.names=NULL)
)
##    Column.Index Column.Name Column.Type
## 1             1        ACAD     integer
## 2             2        APPR     integer
## 3             3        COMM     integer
## 4             4        CFIT     integer
## 5             5        EXPR     integer
## 6             6        JFIT     integer
## 7             7        LETT     integer
## 8             8        LIKE     integer
## 9             9        ORGN     integer
## 10           10        POTL     integer
## 11           11        RESM     integer
## 12           12        SCON     integer

1.2 Data Quality Assessment


[A] No missing observations noted for any variable.

[B] No low variance observed for any variable with First.Second.Mode.Ratio>5.

[C] No low variance observed for any variable with Unique.Count.Ratio<0.01.

[D] No high skewness observed for any variable with Skewness>3 or Skewness<(-3).

Code Chunk | Output
##################################
# Loading dataset
##################################
DQA <- JobHiring

##################################
# Formulating an overall data quality assessment summary
##################################
(DQA.Summary <- data.frame(
  Column.Name= names(DQA),
  Column.Type=sapply(DQA, function(x) class(x)),
  Row.Count=sapply(DQA, function(x) nrow(DQA)),
  NA.Count=sapply(DQA,function(x)sum(is.na(x))),
  Fill.Rate=sapply(DQA,function(x)format(round((sum(!is.na(x))/nrow(DQA)),3),nsmall=3)),
  row.names=NULL)
)
##    Column.Name Column.Type Row.Count NA.Count Fill.Rate
## 1         ACAD     integer        50        0     1.000
## 2         APPR     integer        50        0     1.000
## 3         COMM     integer        50        0     1.000
## 4         CFIT     integer        50        0     1.000
## 5         EXPR     integer        50        0     1.000
## 6         JFIT     integer        50        0     1.000
## 7         LETT     integer        50        0     1.000
## 8         LIKE     integer        50        0     1.000
## 9         ORGN     integer        50        0     1.000
## 10        POTL     integer        50        0     1.000
## 11        RESM     integer        50        0     1.000
## 12        SCON     integer        50        0     1.000
##################################
# Listing all descriptors
##################################
DQA.Descriptors <- DQA

##################################
# Listing all numeric Descriptors
##################################
DQA.Descriptors.Numeric <- DQA.Descriptors[,sapply(DQA.Descriptors, is.numeric)]

if (length(names(DQA.Descriptors.Numeric))>0) {
    print(paste0("There are ",
               (length(names(DQA.Descriptors.Numeric))),
               " numeric descriptor variable(s)."))
} else {
  print("There are no numeric descriptor variables.")
}
## [1] "There are 12 numeric descriptor variable(s)."
##################################
# Listing all factor Descriptors
##################################
DQA.Descriptors.Factor <- DQA.Descriptors[,sapply(DQA.Descriptors, is.factor)]

if (length(names(DQA.Descriptors.Factor))>0) {
    print(paste0("There are ",
               (length(names(DQA.Descriptors.Factor))),
               " factor descriptor variable(s)."))
} else {
  print("There are no factor descriptor variables.")
}
## [1] "There are no factor descriptor variables."
##################################
# Formulating a data quality assessment summary for factor Descriptors
##################################
if (length(names(DQA.Descriptors.Factor))>0) {

  ##################################
  # Formulating a function to determine the first mode
  ##################################
  FirstModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    ux[tab == max(tab)]
  }

  ##################################
  # Formulating a function to determine the second mode
  ##################################
  SecondModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    fm = ux[tab == max(tab)]
    sm = x[!(x %in% fm)]
    usm <- unique(sm)
    tabsm <- tabulate(match(sm, usm))
    ifelse(is.na(usm[tabsm == max(tabsm)])==TRUE,
           return("x"),
           return(usm[tabsm == max(tabsm)]))
  }

  (DQA.Descriptors.Factor.Summary <- data.frame(
  Column.Name= names(DQA.Descriptors.Factor),
  Column.Type=sapply(DQA.Descriptors.Factor, function(x) class(x)),
  Unique.Count=sapply(DQA.Descriptors.Factor, function(x) length(unique(x))),
  First.Mode.Value=sapply(DQA.Descriptors.Factor, function(x) as.character(FirstModes(x)[1])),
  Second.Mode.Value=sapply(DQA.Descriptors.Factor, function(x) as.character(SecondModes(x)[1])),
  First.Mode.Count=sapply(DQA.Descriptors.Factor, function(x) sum(na.omit(x) == FirstModes(x)[1])),
  Second.Mode.Count=sapply(DQA.Descriptors.Factor, function(x) sum(na.omit(x) == SecondModes(x)[1])),
  Unique.Count.Ratio=sapply(DQA.Descriptors.Factor, function(x) format(round((length(unique(x))/nrow(DQA.Descriptors.Factor)),3), nsmall=3)),
  First.Second.Mode.Ratio=sapply(DQA.Descriptors.Factor, function(x) format(round((sum(na.omit(x) == FirstModes(x)[1])/sum(na.omit(x) == SecondModes(x)[1])),3), nsmall=3)),
  row.names=NULL)
  )

}

##################################
# Formulating a data quality assessment summary for numeric Descriptors
##################################
if (length(names(DQA.Descriptors.Numeric))>0) {

  ##################################
  # Formulating a function to determine the first mode
  ##################################
  FirstModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    ux[tab == max(tab)]
  }

  ##################################
  # Formulating a function to determine the second mode
  ##################################
  SecondModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    fm = ux[tab == max(tab)]
    sm = na.omit(x)[!(na.omit(x) %in% fm)]
    usm <- unique(sm)
    tabsm <- tabulate(match(sm, usm))
    ifelse(is.na(usm[tabsm == max(tabsm)])==TRUE,
           return(0.00001),
           return(usm[tabsm == max(tabsm)]))
  }

  (DQA.Descriptors.Numeric.Summary <- data.frame(
  Column.Name= names(DQA.Descriptors.Numeric),
  Column.Type=sapply(DQA.Descriptors.Numeric, function(x) class(x)),
  Unique.Count=sapply(DQA.Descriptors.Numeric, function(x) length(unique(x))),
  Unique.Count.Ratio=sapply(DQA.Descriptors.Numeric, function(x) format(round((length(unique(x))/nrow(DQA.Descriptors.Numeric)),3), nsmall=3)),
  First.Mode.Value=sapply(DQA.Descriptors.Numeric, function(x) format(round((FirstModes(x)[1]),3),nsmall=3)),
  Second.Mode.Value=sapply(DQA.Descriptors.Numeric, function(x) format(round((SecondModes(x)[1]),3),nsmall=3)),
  First.Mode.Count=sapply(DQA.Descriptors.Numeric, function(x) sum(na.omit(x) == FirstModes(x)[1])),
  Second.Mode.Count=sapply(DQA.Descriptors.Numeric, function(x) sum(na.omit(x) == SecondModes(x)[1])),
  First.Second.Mode.Ratio=sapply(DQA.Descriptors.Numeric, function(x) format(round((sum(na.omit(x) == FirstModes(x)[1])/sum(na.omit(x) == SecondModes(x)[1])),3), nsmall=3)),
  Minimum=sapply(DQA.Descriptors.Numeric, function(x) format(round(min(x,na.rm = TRUE),3), nsmall=3)),
  Mean=sapply(DQA.Descriptors.Numeric, function(x) format(round(mean(x,na.rm = TRUE),3), nsmall=3)),
  Median=sapply(DQA.Descriptors.Numeric, function(x) format(round(median(x,na.rm = TRUE),3), nsmall=3)),
  Maximum=sapply(DQA.Descriptors.Numeric, function(x) format(round(max(x,na.rm = TRUE),3), nsmall=3)),
  Skewness=sapply(DQA.Descriptors.Numeric, function(x) format(round(skewness(x,na.rm = TRUE),3), nsmall=3)),
  Kurtosis=sapply(DQA.Descriptors.Numeric, function(x) format(round(kurtosis(x,na.rm = TRUE),3), nsmall=3)),
  Percentile25th=sapply(DQA.Descriptors.Numeric, function(x) format(round(quantile(x,probs=0.25,na.rm = TRUE),3), nsmall=3)),
  Percentile75th=sapply(DQA.Descriptors.Numeric, function(x) format(round(quantile(x,probs=0.75,na.rm = TRUE),3), nsmall=3)),
  row.names=NULL)
  )

}
##    Column.Name Column.Type Unique.Count Unique.Count.Ratio First.Mode.Value
## 1         ACAD     integer            7              0.140            7.000
## 2         APPR     integer            6              0.120            8.000
## 3         COMM     integer            8              0.160            7.000
## 4         CFIT     integer            8              0.160            8.000
## 5         EXPR     integer            6              0.120            8.000
## 6         JFIT     integer            7              0.140            7.000
## 7         LETT     integer            7              0.140            8.000
## 8         LIKE     integer            6              0.120            8.000
## 9         ORGN     integer            7              0.140            7.000
## 10        POTL     integer            7              0.140            8.000
## 11        RESM     integer            7              0.140            9.000
## 12        SCON     integer            5              0.100            7.000
##    Second.Mode.Value First.Mode.Count Second.Mode.Count First.Second.Mode.Ratio
## 1              8.000               14                12                   1.167
## 2              7.000               19                16                   1.188
## 3              8.000               15                14                   1.071
## 4              7.000               15                11                   1.364
## 5              6.000               12                10                   1.200
## 6              8.000               13                12                   1.083
## 7              7.000               12                11                   1.091
## 8              7.000               18                16                   1.125
## 9              5.000               12                10                   1.200
## 10             7.000               15                11                   1.364
## 11             6.000               12                11                   1.091
## 12             8.000               16                14                   1.143
##    Minimum  Mean Median Maximum Skewness Kurtosis Percentile25th Percentile75th
## 1    4.000 7.400  7.000  10.000   -0.091    2.687          6.250          8.000
## 2    5.000 7.440  7.500  10.000   -0.014    2.861          7.000          8.000
## 3    3.000 6.860  7.000  10.000   -0.689    3.572          6.000          8.000
## 4    3.000 6.880  7.000  10.000   -0.324    2.484          6.000          8.000
## 5    5.000 7.320  7.000  10.000   -0.007    2.136          6.000          8.000
## 6    3.000 7.020  7.000  10.000   -0.610    3.541          6.000          8.000
## 7    4.000 7.220  7.000  10.000   -0.140    2.271          6.000          8.000
## 8    4.000 7.380  7.500   9.000   -0.701    3.506          7.000          8.000
## 9    3.000 6.860  7.000   9.000   -0.397    2.238          5.250          8.000
## 10   4.000 7.300  7.500  10.000   -0.457    2.681          6.000          8.000
## 11   4.000 7.240  7.000  10.000   -0.254    2.155          6.000          9.000
## 12   5.000 7.340  7.000   9.000   -0.302    2.365          7.000          8.000
##################################
# Identifying potential data quality issues
##################################

##################################
# Checking for missing observations
##################################
if ((nrow(DQA.Summary[DQA.Summary$NA.Count>0,]))>0){
  print(paste0("Missing observations noted for ",
               (nrow(DQA.Summary[DQA.Summary$NA.Count>0,])),
               " variable(s) with NA.Count>0 and Fill.Rate<1.0."))
  DQA.Summary[DQA.Summary$NA.Count>0,]
} else {
  print("No missing observations noted.")
}
## [1] "No missing observations noted."
##################################
# Checking for zero or near-zero variance Descriptors
##################################
if (length(names(DQA.Descriptors.Factor))==0) {
  print("No factor descriptors noted.")
} else if (nrow(DQA.Descriptors.Factor.Summary[as.numeric(as.character(DQA.Descriptors.Factor.Summary$First.Second.Mode.Ratio))>5,])>0){
  print(paste0("Low variance observed for ",
               (nrow(DQA.Descriptors.Factor.Summary[as.numeric(as.character(DQA.Descriptors.Factor.Summary$First.Second.Mode.Ratio))>5,])),
               " factor variable(s) with First.Second.Mode.Ratio>5."))
  DQA.Descriptors.Factor.Summary[as.numeric(as.character(DQA.Descriptors.Factor.Summary$First.Second.Mode.Ratio))>5,]
} else {
  print("No low variance factor descriptors due to high first-second mode ratio noted.")
}
## [1] "No factor descriptors noted."
if (length(names(DQA.Descriptors.Numeric))==0) {
  print("No numeric descriptors noted.")
} else if (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$First.Second.Mode.Ratio))>5,])>0){
  print(paste0("Low variance observed for ",
               (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$First.Second.Mode.Ratio))>5,])),
               " numeric variable(s) with First.Second.Mode.Ratio>5."))
  DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$First.Second.Mode.Ratio))>5,]
} else {
  print("No low variance numeric descriptors due to high first-second mode ratio noted.")
}
## [1] "No low variance numeric descriptors due to high first-second mode ratio noted."
if (length(names(DQA.Descriptors.Numeric))==0) {
  print("No numeric descriptors noted.")
} else if (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Unique.Count.Ratio))<0.01,])>0){
  print(paste0("Low variance observed for ",
               (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Unique.Count.Ratio))<0.01,])),
               " numeric variable(s) with Unique.Count.Ratio<0.01."))
  DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Unique.Count.Ratio))<0.01,]
} else {
  print("No low variance numeric descriptors due to low unique count ratio noted.")
}
## [1] "No low variance numeric descriptors due to low unique count ratio noted."
##################################
# Checking for skewed Descriptors
##################################
if (length(names(DQA.Descriptors.Numeric))==0) {
  print("No numeric descriptors noted.")
} else if (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))>3 |
                                               as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))<(-3),])>0){
  print(paste0("High skewness observed for ",
  (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))>3 |
                                               as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))<(-3),])),
  " numeric variable(s) with Skewness>3 or Skewness<(-3)."))
  DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))>3 |
                                 as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))<(-3),]
} else {
  print("No skewed numeric descriptors noted.")
}
## [1] "No skewed numeric descriptors noted."

1.3 Data Preprocessing

1.3.1 Outlier Detection


[A] Outliers noted for 3 out of the 12 descriptors. Descriptor values were visualized through a boxplot including observations classified as suspected outliers using the IQR criterion. The IQR criterion means that all observations above the (75th percentile + 1.5 x IQR) or below the (25th percentile - 1.5 x IQR) are suspected outliers, where IQR is the difference between the third quartile (75th percentile) and first quartile (25th percentile).
     [A.1] APPR = 2
     [A.2] LIKE = 3
     [A.3] SCON = 4

Code Chunk | Output
##################################
# Loading dataset
##################################
DPA <- JobHiring

##################################
# Gathering descriptive statistics
##################################
(DPA_Skimmed <- skim(DPA))
Data summary
Name DPA
Number of rows 50
Number of columns 12
_______________________
Column type frequency:
numeric 12
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
ACAD 0 1 7.40 1.29 4 6.25 7.0 8 10 ▁▆▇▇▆
APPR 0 1 7.44 1.01 5 7.00 7.5 8 10 ▃▇▇▂▁
COMM 0 1 6.86 1.47 3 6.00 7.0 8 10 ▁▁▇▅▁
CFIT 0 1 6.88 1.62 3 6.00 7.0 8 10 ▂▃▇▇▃
EXPR 0 1 7.32 1.36 5 6.00 7.0 8 10 ▇▆▆▅▁
JFIT 0 1 7.02 1.60 3 6.00 7.0 8 10 ▁▁▇▃▂
LETT 0 1 7.22 1.67 4 6.00 7.0 8 10 ▆▅▇▇▇
LIKE 0 1 7.38 1.12 4 7.00 7.5 8 9 ▁▂▇▇▃
ORGN 0 1 6.86 1.58 3 5.25 7.0 8 9 ▁▃▂▅▇
POTL 0 1 7.30 1.39 4 6.00 7.5 8 10 ▂▅▆▇▅
RESM 0 1 7.24 1.68 4 6.00 7.0 9 10 ▃▆▅▅▇
SCON 0 1 7.34 1.17 5 7.00 7.0 8 9 ▂▃▇▇▅
##################################
# Outlier Detection
##################################

##################################
# Listing all Descriptors
##################################
DPA.Descriptors <- DPA

##################################
# Listing all numeric Descriptors
##################################
DPA.Descriptors.Numeric <- DPA.Descriptors[,sapply(DPA.Descriptors, is.numeric)]

##################################
# Identifying outliers for the numeric Descriptors
##################################
OutlierCountList <- c()

for (i in 1:ncol(DPA.Descriptors.Numeric)) {
  Outliers <- boxplot.stats(DPA.Descriptors.Numeric[,i])$out
  OutlierCount <- length(Outliers)
  OutlierCountList <- append(OutlierCountList,OutlierCount)
  OutlierIndices <- which(DPA.Descriptors.Numeric[,i] %in% c(Outliers))
  print(
  ggplot(DPA.Descriptors.Numeric, aes(x=DPA.Descriptors.Numeric[,i])) +
  geom_boxplot() +
  theme_bw() +
  theme(axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()) +
  xlab(names(DPA.Descriptors.Numeric)[i]) +
  labs(title=names(DPA.Descriptors.Numeric)[i],
       subtitle=paste0(OutlierCount, " Outlier(s) Detected")))
}

1.3.2 Zero and Near-Zero Variance


[A] No low variance observed for any descriptor using a preprocessing summary from the caret package. The nearZeroVar method using both the freqCut and uniqueCut criteria set at 95/5 and 10, respectively, were applied on the dataset.

Code Chunk | Output
##################################
# Zero and Near-Zero Variance
##################################

##################################
# Identifying columns with low variance
###################################
DPA_LowVariance <- nearZeroVar(DPA,
                               freqCut = 80/20,
                               uniqueCut = 10,
                               saveMetrics= TRUE)
(DPA_LowVariance[DPA_LowVariance$nzv,])
## [1] freqRatio     percentUnique zeroVar       nzv          
## <0 rows> (or 0-length row.names)
if ((nrow(DPA_LowVariance[DPA_LowVariance$nzv,]))==0){
  
  print("No low variance descriptors noted.")
  
} else {

  print(paste0("Low variance observed for ",
               (nrow(DPA_LowVariance[DPA_LowVariance$nzv,])),
               " numeric variable(s) with First.Second.Mode.Ratio>4 and Unique.Count.Ratio<0.10."))
  
  DPA_LowVarianceForRemoval <- (nrow(DPA_LowVariance[DPA_LowVariance$nzv,]))
  
  print(paste0("Low variance can be resolved by removing ",
               (nrow(DPA_LowVariance[DPA_LowVariance$nzv,])),
               " numeric variable(s)."))
  
  for (j in 1:DPA_LowVarianceForRemoval) {
  DPA_LowVarianceRemovedVariable <- rownames(DPA_LowVariance[DPA_LowVariance$nzv,])[j]
  print(paste0("Variable ",
               j,
               " for removal: ",
               DPA_LowVarianceRemovedVariable))
  }
  
  DPA %>%
  skim() %>%
  dplyr::filter(skim_variable %in% rownames(DPA_LowVariance[DPA_LowVariance$nzv,]))

}
## [1] "No low variance descriptors noted."

1.3.3 Collinearity


[A] No multicollinearity with Pearson correlation coefficients >80% was noted among pairs of descriptors using the preprocessing summary from the caret package.

Code Chunk | Output
##################################
# Visualizing pairwise correlation between descriptor
##################################
(DPA_Correlation <- cor(DPA.Descriptors.Numeric,
                        method = "pearson",
                        use="pairwise.complete.obs"))
##           ACAD      APPR      COMM      CFIT      EXPR      JFIT      LETT
## ACAD 1.0000000 0.4701427 0.4054067 0.4992183 0.6672390 0.5393435 0.3269457
## APPR 0.4701427 1.0000000 0.4939720 0.4170806 0.3099465 0.4105762 0.3034917
## COMM 0.4054067 0.4939720 1.0000000 0.5907387 0.1960094 0.5050808 0.4033781
## CFIT 0.4992183 0.4170806 0.5907387 1.0000000 0.3959678 0.8820580 0.4539438
## EXPR 0.6672390 0.3099465 0.1960094 0.3959678 1.0000000 0.5224501 0.4800248
## JFIT 0.5393435 0.4105762 0.5050808 0.8820580 0.5224501 1.0000000 0.4652077
## LETT 0.3269457 0.3034917 0.4033781 0.4539438 0.4800248 0.4652077 1.0000000
## LIKE 0.3990134 0.6392098 0.4900438 0.4842812 0.3058838 0.5305521 0.3572902
## ORGN 0.3578991 0.5370193 0.8617976 0.6223051 0.1732109 0.5274873 0.3372713
## POTL 0.7951979 0.5133541 0.4206029 0.6586426 0.7035542 0.7057635 0.3846555
## RESM 0.4606419 0.4986309 0.4255336 0.4432190 0.5172440 0.4607897 0.8368872
## SCON 0.4067717 0.6967065 0.4309427 0.4616973 0.4037882 0.4654267 0.2323177
##           LIKE      ORGN      POTL      RESM      SCON
## ACAD 0.3990134 0.3578991 0.7951979 0.4606419 0.4067717
## APPR 0.6392098 0.5370193 0.5133541 0.4986309 0.6967065
## COMM 0.4900438 0.8617976 0.4206029 0.4255336 0.4309427
## CFIT 0.4842812 0.6223051 0.6586426 0.4432190 0.4616973
## EXPR 0.3058838 0.1732109 0.7035542 0.5172440 0.4037882
## JFIT 0.5305521 0.5274873 0.7057635 0.4607897 0.4654267
## LETT 0.3572902 0.3372713 0.3846555 0.8368872 0.2323177
## LIKE 1.0000000 0.5258919 0.4881676 0.4685663 0.7532282
## ORGN 0.5258919 1.0000000 0.4199960 0.2968767 0.4900298
## POTL 0.4881676 0.4199960 1.0000000 0.4570046 0.5006195
## RESM 0.4685663 0.2968767 0.4570046 1.0000000 0.4334882
## SCON 0.7532282 0.4900298 0.5006195 0.4334882 1.0000000
DPA_CorrelationTest <- cor.mtest(DPA.Descriptors.Numeric,
                       method = "pearson",
                       conf.level = 0.95)

corrplot(cor(DPA.Descriptors.Numeric,
             method = "pearson",
             use="pairwise.complete.obs"),
             method = "circle",
             type = "upper",
             order = "original",
             tl.col = "black",
             tl.cex = 0.75,
             tl.srt = 90,
             sig.level = 0.05,
             p.mat = DPA_CorrelationTest$p,
             insig = "blank")

corrplot(cor(DPA.Descriptors.Numeric,
             method = "pearson",
             use="pairwise.complete.obs"),
             method = "number",
             type = "upper",
             order = "original",
             tl.col = "black",
             tl.cex = 0.75,
             tl.srt = 90,
             sig.level = 0.05,
             p.mat = DPA_CorrelationTest$p,
             insig = "blank")

##################################
# Identifying the highly correlated variables
##################################
(DPA_HighlyCorrelatedCount <- sum(abs(DPA_Correlation[upper.tri(DPA_Correlation)])>0.90))
## [1] 0
if (DPA_HighlyCorrelatedCount > 0) {
  DPA_HighlyCorrelated <- findCorrelation(DPA_Correlation, cutoff = 0.90)

  (DPA_HighlyCorrelatedForRemoval <- length(DPA_HighlyCorrelated))

  print(paste0("High correlation can be resolved by removing ",
               (DPA_HighlyCorrelatedForRemoval),
               " numeric variable(s)."))

  for (j in 1:DPA_HighlyCorrelatedForRemoval) {
  DPA_HighlyCorrelatedRemovedVariable <- colnames(DPA.Predictors.Numeric)[DPA_HighlyCorrelated[j]]
  print(paste0("Variable ",
               j,
               " for removal: ",
               DPA_HighlyCorrelatedRemovedVariable))
  }

}

1.3.4 Linear Dependency


[A] No linear dependencies noted for any subset of decriptors using the preprocessing summary from the caret package applying the findLinearCombos method which utilizes the QR decomposition of a matrix to enumerate sets of linear combinations (if they exist).

Code Chunk | Output
##################################
# Linear Dependencies
##################################

##################################
# Finding linear dependencies
##################################
DPA_LinearlyDependent <- findLinearCombos(DPA.Descriptors.Numeric)

##################################
# Identifying the linearly dependent variables
##################################
DPA_LinearlyDependent <- findLinearCombos(DPA.Descriptors.Numeric)

(DPA_LinearlyDependentCount <- length(DPA_LinearlyDependent$linearCombos))
## [1] 0
if (DPA_LinearlyDependentCount == 0) {
  print("No linearly dependent predictors noted.")
} else {
  print(paste0("Linear dependency observed for ",
               (DPA_LinearlyDependentCount),
               " subset(s) of numeric variable(s)."))
  
  for (i in 1:DPA_LinearlyDependentCount) {
    DPA_LinearlyDependentSubset <- colnames(DPA.Predictors.Numeric)[DPA_LinearlyDependent$linearCombos[[i]]]
    print(paste0("Linear dependent variable(s) for subset ",
                 i,
                 " include: ",
                 DPA_LinearlyDependentSubset))
  }
  
}
## [1] "No linearly dependent predictors noted."
##################################
# Identifying the linearly dependent variables for removal
##################################

if (DPA_LinearlyDependentCount > 0) {
  DPA_LinearlyDependent <- findLinearCombos(DPA.Predictors.Numeric)
  
  DPA_LinearlyDependentForRemoval <- length(DPA_LinearlyDependent$remove)
  
  print(paste0("Linear dependency can be resolved by removing ",
               (DPA_LinearlyDependentForRemoval),
               " numeric variable(s)."))
  
  for (j in 1:DPA_LinearlyDependentForRemoval) {
  DPA_LinearlyDependentRemovedVariable <- colnames(DPA.Predictors.Numeric)[DPA_LinearlyDependent$remove[j]]
  print(paste0("Variable ",
               j,
               " for removal: ",
               DPA_LinearlyDependentRemovedVariable))
  }

}

1.3.5 Distributional Shape


[A] No shape transformation was necessary as the distributional skewness observed among individual descriptors was normal (all values within +3 and -3) with minimal outliers.

Code Chunk | Output
##################################
# Distributional Shape
##################################

##################################
# Formulating the histogram
# for the numeric descriptors
##################################
for (i in 1:ncol(DPA.Descriptors.Numeric)) {
  Median <- format(round(median(DPA.Descriptors.Numeric[,i],na.rm = TRUE),2), nsmall=2)
  Mean <- format(round(mean(DPA.Descriptors.Numeric[,i],na.rm = TRUE),2), nsmall=2)
  Skewness <- format(round(skewness(DPA.Descriptors.Numeric[,i],na.rm = TRUE),2), nsmall=2)
  print(
  ggplot(DPA.Descriptors.Numeric, aes(x=DPA.Descriptors.Numeric[,i])) +
  geom_histogram(binwidth=1,color="black", fill="white") +
  geom_vline(aes(xintercept=mean(DPA.Descriptors.Numeric[,i])),
            color="blue", size=1) +
    geom_vline(aes(xintercept=median(DPA.Descriptors.Numeric[,i])),
            color="red", size=1) +
  theme_bw() +
  ylab("Count") +
  xlab(names(DPA.Descriptors.Numeric)[i]) +
  labs(title=names(DPA.Descriptors.Numeric)[i],
       subtitle=paste0("Median = ", Median,
                       ", Mean = ", Mean,
                       ", Skewness = ", Skewness)))
}

1.4 Data Pre-Assessment

1.4.1 Correlation Matrix Assessment - Covariance Validity


[A] Covariance among descriptors in the correlation matrix was sufficient to justify the conduct of an exploratory factor analysis. 94% (62/66) of the pairwise associations using the Pearson correlation coefficient were above 30%.

Code Chunk | Output
##################################
# Identifying the minimally correlated variables
##################################
(DPA_MinimallyCorrelatedCount <- sum(abs(DPA_Correlation[upper.tri(DPA_Correlation)])>0.30))
## [1] 62
(DPA_AllPairs <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(DPA_MinimallyCorrelatedCountPercentage <- DPA_MinimallyCorrelatedCount/DPA_AllPairs)
## [1] 0.9393939
qgraph(cor(DPA.Descriptors.Numeric),
       cut=0.30,
       details=TRUE,
       posCol="#2F75B5",
       negCol="#FF5050",
       labels=names(DPA.Descriptors.Numeric))

1.4.2 Correlation Matrix Assessment - Determinant Computation


[A] The determinant of the correlation matrix was computed as 0.00002 (greater than .00001) indicating the absence of the likelihood for a multicollinearity problem. The results allowed for matrix operations to produce stable results during exploratory factor analysis.

Code Chunk | Output
##################################
# Computing the determinant of the correlation matrix
##################################
(DPA_CorrelationMatrixDeterminant <- det(cor(DPA.Descriptors.Numeric)))
## [1] 2.258001e-05

1.4.3 Correlation Matrix Assessment - Bartlett’s Test of Sphericity


[A] The computed p-value from the Bartlett’s Test of Sphericity was statistically significant (<0.00001), rejecting the null hypothesis that the correlation matrix is an identity matrix (ones on the diagonal and zeros on the off-diagonal). Results indicated that the correlation matrix is appropriate for exploratory factor analysis.

Code Chunk | Output
##################################
# Calculating the Bartlett's Test of Sphericity
##################################
(DPA_BartlettTest <- cortest.bartlett(DPA.Descriptors.Numeric,
                                      n=nrow(DPA.Descriptors.Numeric)))
## $chisq
## [1] 472.5147
## 
## $p.value
## [1] 9.677847e-63
## 
## $df
## [1] 66

1.4.4 Correlation Matrix Assessment - Kaiser-Meyer-Olkin Factor Adequacy


[A] The KMO measure of sampling adequacy was acceptable with a computed value of 0.798 for the complete model, indicating the suitability of the data for exploratory factor analysis. The estimated proportion of variance among all the observed variable was sufficiently adequate.

[B] The sampling adequacy for each variable in the model was acceptable with KMO values ranging from 0.676 to 0.883. Results indicated that each variable can be sufficiently predicted by other variables.
     [B.1] ACAD = 0.85
     [B.2] APPR = 0.88
     [B.3] COMM = 0.79
     [B.4] CFIT = 0.81
     [B.5] EXPR = 0.78
     [B.6] JFIT = 0.83
     [B.7] LETT = 0.68
     [B.8] LIKE = 0.85
     [B.9] ORGN = 0.74
     [B.10] POTL = 0.88
     [B.11] RESM = 0.71
     [B.12] SCON = 0.78

Code Chunk | Output
##################################
# Calculating the Kaiser-Meyer-Olkin Factor Adequacy
##################################
(DPA_KMOFactorAdequacy <- KMO(DPA.Descriptors.Numeric))
## 
## -- Kaiser-Meyer-Olkin criterion (KMO) ------------------------------------------
## 
## v The overall KMO value for your data is middling.
##   These data are probably suitable for factor analysis.
## 
##   Overall: 0.798
## 
##   For each variable:
##  ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM  SCON 
## 0.847 0.876 0.790 0.809 0.782 0.827 0.676 0.851 0.740 0.883 0.712 0.777

1.5 Data Exploration


[A] With the descriptors treated as ordered categorical variables, distribution patterns were observed as follows:
     [A.1] As individual descriptors, ACAD, APPR, LIKE and SCON obtained higher proportions of likert scale scores of 6 and above
     [A.2] As individual descriptors, CFIT and ORGN obtained higher proportions of likert scale scores of 5 and below

[B] With the descriptors treated as numeric variables, all pairwise associations were positive with the highest Pearson correlation coefficient values noted for the following:
     [B.1] JFIT and CFIT = 0.88
     [B.2] COMM and ORGN = 0.86
     [B.3] RESM and LETT = 0.84

Code Chunk | Output
##################################
# Percentage contribution
# among descriptors when treated
# as ordered categorical variables
##################################
DPA.Descriptors.Ordered <- gather(DPA.Descriptors.Numeric,
                                   "ACAD",
                                   "APPR",
                                   "COMM",
                                   "CFIT",
                                   "EXPR",
                                   "JFIT",
                                   "LETT",
                                   "LIKE",  
                                   "ORGN",
                                   "POTL",
                                   "RESM",
                                   "SCON",
                                   key="Likert_Variable",
                                   value="Likert_Score")


DPA.Descriptors.Ordered$Likert_Variable <- as.factor(DPA.Descriptors.Ordered$Likert_Variable)
DPA.Descriptors.Ordered$Likert_Score <- factor(DPA.Descriptors.Ordered$Likert_Score,                                               levels=c("1","2","3","4","5","6","7","8","9","10"))

(DPA.Descriptors.OrderedTable <- table(DPA.Descriptors.Ordered$Likert_Variable,
                                       DPA.Descriptors.Ordered$Likert_Score))
##       
##         1  2  3  4  5  6  7  8  9 10
##   ACAD  0  0  0  1  1 11 14 12  9  2
##   APPR  0  0  0  0  1  8 16 19  5  1
##   CFIT  0  0  1  3  8  6 11 15  4  2
##   COMM  0  0  2  2  3 10 15 14  3  1
##   EXPR  0  0  0  0  5 10 12 12  9  2
##   JFIT  0  0  3  0  3 11 13 12  6  2
##   LETT  0  0  0  3  6  7 11 12  6  5
##   LIKE  0  0  0  1  2  6 16 18  7  0
##   ORGN  0  0  1  2 10  5 12 12  8  0
##   POTL  0  0  0  2  3  9 11 15  9  1
##   RESM  0  0  0  4  3 11  9  8 12  3
##   SCON  0  0  0  0  4  7 16 14  9  0
DPA.Descriptors.OrderedTableProportion <- as.data.frame(rbind(prop.table(DPA.Descriptors.OrderedTable,1)))
DPA.Descriptors.OrderedTableProportion$LikertVariables <- rownames(DPA.Descriptors.OrderedTableProportion)
DPA.Descriptors.OrderedTableProportion
##      1 2    3    4    5    6    7    8    9   10 LikertVariables
## ACAD 0 0 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04            ACAD
## APPR 0 0 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02            APPR
## CFIT 0 0 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04            CFIT
## COMM 0 0 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02            COMM
## EXPR 0 0 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04            EXPR
## JFIT 0 0 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04            JFIT
## LETT 0 0 0.00 0.06 0.12 0.14 0.22 0.24 0.12 0.10            LETT
## LIKE 0 0 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00            LIKE
## ORGN 0 0 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00            ORGN
## POTL 0 0 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02            POTL
## RESM 0 0 0.00 0.08 0.06 0.22 0.18 0.16 0.24 0.06            RESM
## SCON 0 0 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00            SCON
likert(LikertVariables~., 
       DPA.Descriptors.OrderedTableProportion, 
       ReferenceZero=5.5, 
       ylab = "Likert Variables", 
       xlab = "Percentage Distribution of Likert Scale Scores",
       main = list("Variables Characterizing Candidates During Job Hiring"), 
       auto.key = list(columns = 10,
                       reverse.rows = F))

##################################
# Pairwise association
# between descriptors when treated
# as quantitative variables
##################################
corrplot(cor(DPA.Descriptors.Numeric,
             method = "pearson",
             use="pairwise.complete.obs"),
             method = "number",
             type = "upper",
             order = "original",
             tl.col = "black",
             tl.cex = 0.75,
             tl.srt = 90,
             sig.level = 0.05,
             p.mat = DPA_CorrelationTest$p,
             insig = "blank")

##################################
# Identifying the maximally correlated variables
##################################
DPA_MaximallyCorrelated <- findCorrelation(DPA_Correlation, cutoff = 0.80)
colnames(DPA.Descriptors.Numeric)[DPA_MaximallyCorrelated]
## [1] "JFIT" "RESM" "COMM"
##################################
# Formulating the pairwise scatterplots
# among descriptors
##################################
splom(~DPA.Descriptors.Numeric,
      pch = 16,
      cex = 1,
      alpha = 0.45,
      auto.key = list(points = TRUE, space = "right"),
      main = "Exploratory Analysis Between Descriptors",
      xlab = "Scatterplot Matrix of Descriptors")

1.6 Factor Analysis

1.6.1 Principal Axes Factor Extraction and Varimax Rotation (FA_PA_V)


[A] Appplying Principal Axes factor extraction and Varimax rotation, an evaluation was conducted using a set of empirical guidelines to determine the optimal number of factors to be retained for exploratory factor analysis. It was determined that:
     [A.1] 4 factors would be sufficient for an optimal balance between comprehensiveness and parsimony.
     [A.2] To ensure that both under-extraction and over-extraction are assessed, models with 3, 4 and 5 factors were sequentially evaluated for their interpretability and theoretical meaningfulness.
     [A.3] The choice of 4 factors was supported by maximum consensus (35.71%) from 5 (Bentler, Beta, Parallel Analysis, Kaiser Criterion and Standardized Scree) among 14 methods.

[B] Results for the exploratory factor analysis using a 3-Factor Structure were as follows:
     [B.1] Standardized Root Mean Square of the Residual = 0.07
     [B.2] Tucker-Lewis Fit Index = 0.62
     [B.3] Bayesian Information Criterion = -22.76
     [B.4] High Residual Rate = 0.27
     [B.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [B.5.1] ORGN: Loading = 0.88, Communality = 0.79
            [B.5.2] COMM: Loading = 0.79, Communality = 0.69
            [B.5.3] LIKE: Loading = 0.64, Communality = 0.54
            [B.5.4] APPR: Loading = 0.60, Communality = 0.50
            [B.5.5] SCON: Loading = 0.60, Communality = 0.51
            [B.5.6] CFIT: Loading = 0.60, Communality = 0.61
            [B.5.7] Cronbach’s Alpha = 0.88
     [B.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [B.6.1] POTL: Loading = 0.85, Communality = 0.87
            [B.6.2] EXPR: Loading = 0.76, Communality = 0.69
            [B.6.3] ACAD: Loading = 0.74, Communality = 0.65
            [B.6.4] JFIT: Loading = 0.56, Communality = 0.64
            [B.6.5] Cronbach’s Alpha = 0.88
     [B.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [B.7.1] LETT: Loading = 0.88, Communality = 0.86
            [B.7.2] RESM: Loading = 0.81, Communality = 0.83
            [B.7.3] Cronbach’s Alpha = 0.91

[C] Results for the exploratory factor analysis using a 4-Factor Structure were as follows:
     [C.1] Standardized Root Mean Square of the Residual = 0.04
     [C.2] Tucker-Lewis Fit Index = 0.73
     [C.3] Bayesian Information Criterion = -33.02
     [C.4] High Residual Rate = 0.15
     [C.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [C.5.1] POTL: Loading = 0.85, Communality = 0.89
            [C.5.2] EXPR: Loading = 0.73, Communality = 0.68
            [C.5.3] ACAD: Loading = 0.71, Communality = 0.64
            [C.5.4] JFIT: Loading = 0.61, Communality = 0.73
            [C.5.5] Cronbach’s Alpha = 0.88
     [C.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [C.6.1] ORGN: Loading = 0.84, Communality = 0.86
            [C.6.2] COMM: Loading = 0.76, Communality = 0.73
            [C.6.3] CFIT: Loading = 0.65, Communality = 0.76
            [C.6.4] Cronbach’s Alpha = 0.87
     [C.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [C.7.1] SCON: Loading = 0.82, Communality = 0.79
            [C.7.2] APPR: Loading = 0.70, Communality = 0.65
            [C.7.3] LIKE: Loading = 0.69, Communality = 0.66
            [C.7.4] Cronbach’s Alpha = 0.87
     [C.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [C.8.1] LETT: Loading = 0.88, Communality = 0.89
            [C.8.2] RESM: Loading = 0.83, Communality = 0.88
            [C.8.3] Cronbach’s Alpha = 0.91

[D] Results for the exploratory factor analysis using a 5-Factor Structure were as follows:
     [D.1] Standardized Root Mean Square of the Residual = 0.02
     [D.2] Tucker-Lewis Fit Index = 0.96
     [D.3] Bayesian Information Criterion = -43.43
     [D.4] High Residual Rate = 0.00
     [D.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [D.5.1] ACAD: Loading = 0.82, Communality = 0.79
            [D.5.2] POTL: Loading = 0.78, Communality = 0.87
            [D.5.3] EXPR: Loading = 0.70, Communality = 0.67
            [C.5.4] Cronbach’s Alpha = 0.89
     [D.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [D.6.1] SCON: Loading = 0.86, Communality = 0.85
            [D.6.2] LIKE: Loading = 0.72, Communality = 0.69
            [D.6.3] APPR: Loading = 0.66, Communality = 0.64
            [C.6.4] Cronbach’s Alpha = 0.87
     [D.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [D.7.1] COMM: Loading = 0.83, Communality = 0.86
            [D.7.2] ORGN: Loading = 0.83, Communality = 0.89
            [C.7.3] Cronbach’s Alpha = 0.92
     [D.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [D.8.1] LETT: Loading = 0.89, Communality = 0.89
            [D.8.2] RESM: Loading = 0.82, Communality = 0.87
            [C.8.3] Cronbach’s Alpha = 0.91
     [D.9] Factor 5 was a latent variable with higher loading towards the following descriptors:
            [D.9.1] JFIT: Loading = 0.80, Communality = 0.93
            [D.9.2] CFIT: Loading = 0.74, Communality = 0.86
            [C.9.3] Cronbach’s Alpha = 0.94

Code Chunk | Output
##################################
# Implementing various procedures for determining
# factor retention based on
# the maximum consensus between methods
##################################
(FA_PA_V_MethodAgreementProcedure <- parameters::n_factors(DPA.Descriptors.Numeric,
                                                           algorithm = "pa",
                                                           rotation = "varimax"))
## # Method Agreement Procedure:
## 
## The choice of 4 dimensions is supported by 5 (35.71%) methods out of 14 (Bentler, beta, Parallel analysis, Kaiser criterion, Scree (SE)).
as.data.frame(FA_PA_V_MethodAgreementProcedure)
##    n_Factors              Method              Family
## 1          1 Acceleration factor               Scree
## 2          1          Scree (R2)            Scree_SE
## 3          2 Optimal coordinates               Scree
## 4          3                 CNG                 CNG
## 5          4             Bentler             Bentler
## 6          4                beta Multiple_regression
## 7          4   Parallel analysis               Scree
## 8          4    Kaiser criterion               Scree
## 9          4          Scree (SE)            Scree_SE
## 10         6            Bartlett             Barlett
## 11         6                   t Multiple_regression
## 12         6                   p Multiple_regression
## 13         7            Anderson             Barlett
## 14         7              Lawley             Barlett
##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Varimax rotation
# with 3 factors
##################################
(FA_PA_V_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="pa",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       PA1  PA2  PA3   h2   u2 com
## ACAD 0.28 0.74 0.16 0.65 0.35 1.4
## APPR 0.60 0.32 0.18 0.50 0.50 1.7
## COMM 0.79 0.10 0.22 0.69 0.31 1.2
## CFIT 0.60 0.46 0.22 0.61 0.39 2.2
## EXPR 0.05 0.76 0.34 0.69 0.31 1.4
## JFIT 0.52 0.56 0.24 0.64 0.36 2.4
## LETT 0.22 0.20 0.88 0.86 0.14 1.2
## LIKE 0.64 0.31 0.19 0.54 0.46 1.6
## ORGN 0.88 0.09 0.11 0.79 0.21 1.0
## POTL 0.36 0.85 0.14 0.87 0.13 1.4
## RESM 0.28 0.31 0.81 0.83 0.17 1.5
## SCON 0.60 0.37 0.11 0.51 0.49 1.8
## 
##                        PA1  PA2  PA3
## SS loadings           3.49 2.85 1.84
## Proportion Var        0.29 0.24 0.15
## Cumulative Var        0.29 0.53 0.68
## Proportion Explained  0.43 0.35 0.22
## Cumulative Proportion 0.43 0.78 1.00
## 
## Mean item complexity =  1.6
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.52 
## 
## The root mean square of the residuals (RMSR) is  0.07 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  35.54  with prob <  0.35 
## The total number of observations was  50  with Likelihood Chi Square =  106.33  with prob <  1.2e-09 
## 
## Tucker Lewis Index of factoring reliability =  0.619
## RMSEA index =  0.21  and the 90 % confidence intervals are  0.168 0.259
## BIC =  -22.76
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA3
## Correlation of (regression) scores with factors   0.94 0.94 0.94
## Multiple R square of scores with factors          0.88 0.88 0.88
## Minimum correlation of possible factor scores     0.76 0.75 0.75
(FA_PA_V_3F_Summary <- FA_PA_V_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | PA1  | PA2  | PA3  | Complexity | Uniqueness
## -------------------------------------------------------
## ORGN     | 0.88 |      |      |    1.05    |    0.21   
## COMM     | 0.79 |      |      |    1.19    |    0.31   
## LIKE     | 0.64 |      |      |    1.65    |    0.46   
## APPR     | 0.60 |      |      |    1.72    |    0.50   
## SCON     | 0.60 |      |      |    1.76    |    0.49   
## CFIT     | 0.60 |      |      |    2.19    |    0.39   
## POTL     |      | 0.85 |      |    1.41    |    0.13   
## EXPR     |      | 0.76 |      |    1.40    |    0.31   
## ACAD     |      | 0.74 |      |    1.40    |    0.35   
## JFIT     |      | 0.56 |      |    2.35    |    0.36   
## LETT     |      |      | 0.88 |    1.23    |    0.14   
## RESM     |      |      | 0.81 |    1.54    |    0.17   
## 
## The 3 latent factors (varimax rotation) accounted for 68.18% of the total variance of the original data (PA1 = 29.08%, PA2 = 23.78%, PA3 = 15.33%).
summary(FA_PA_V_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA3
## -------------------------------------------------------
## Eigenvalues                     | 6.069 | 1.209 | 0.903
## Variance Explained              | 0.291 | 0.238 | 0.153
## Variance Explained (Cumulative) | 0.291 | 0.529 | 0.682
## Variance Explained (Proportion) | 0.427 | 0.349 | 0.225
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_V_3F_Residual <- residuals(FA_PA_V_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.07 -0.06    NA                                                
## CFIT -0.04 -0.13  0.02    NA                                          
## EXPR  0.04 -0.02  0.00 -0.06    NA                                    
## JFIT -0.06 -0.12 -0.01  0.27 -0.01    NA                              
## LETT -0.02 -0.05  0.01  0.04  0.02  0.03    NA                        
## LIKE -0.04  0.12 -0.09 -0.08 -0.03 -0.02 -0.01    NA                  
## ORGN  0.03 -0.04  0.13  0.04  0.03  0.00  0.03 -0.08    NA            
## POTL  0.04  0.00  0.02  0.03 -0.01  0.01  0.01 -0.03  0.01    NA      
## RESM  0.02  0.09 -0.01 -0.05 -0.01 -0.05  0.00  0.04 -0.06 -0.02    NA
## SCON -0.06  0.20 -0.10 -0.09  0.05 -0.08 -0.07  0.24 -0.08 -0.05  0.06
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_V_3F_RMS <- FA_PA_V_3F$rms)
## [1] 0.07338105
(FA_PA_V_3F_TLI <- FA_PA_V_3F$TLI)
## [1] 0.6191606
(FA_PA_V_3F_BIC <- FA_PA_V_3F$BIC)
## [1] -22.76274
(FA_PA_V_3F_MaxResidual   <- max(abs(FA_PA_V_3F_Residual),na.rm=TRUE))
## [1] 0.2668687
(FA_PA_V_3F_HighResidual  <- sum(FA_PA_V_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 18
(FA_PA_V_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_V_3F_HighResidualRate <- FA_PA_V_3F_HighResidual/FA_PA_V_3F_TotalResidual)
## [1] 0.2727273
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Varimax Rotation : 3 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_V_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 3,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_V_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Varimax rotation
# with 4 factors
##################################
(FA_PA_V_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="pa",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       PA1   PA2  PA4  PA3   h2   u2 com
## ACAD 0.71  0.18 0.27 0.16 0.64 0.36 1.5
## APPR 0.23  0.27 0.70 0.17 0.65 0.35 1.7
## COMM 0.12  0.76 0.31 0.21 0.73 0.27 1.5
## CFIT 0.52  0.65 0.15 0.19 0.76 0.24 2.2
## EXPR 0.73 -0.03 0.18 0.33 0.68 0.32 1.5
## JFIT 0.61  0.53 0.17 0.21 0.73 0.27 2.4
## LETT 0.23  0.25 0.06 0.88 0.89 0.11 1.3
## LIKE 0.23  0.32 0.69 0.19 0.66 0.34 1.8
## ORGN 0.09  0.84 0.36 0.09 0.86 0.14 1.4
## POTL 0.85  0.26 0.29 0.12 0.89 0.11 1.5
## RESM 0.28  0.13 0.33 0.83 0.88 0.12 1.6
## SCON 0.27  0.21 0.82 0.09 0.79 0.21 1.4
## 
##                        PA1  PA2  PA4  PA3
## SS loadings           2.75 2.39 2.21 1.80
## Proportion Var        0.23 0.20 0.18 0.15
## Cumulative Var        0.23 0.43 0.61 0.76
## Proportion Explained  0.30 0.26 0.24 0.20
## Cumulative Proportion 0.30 0.56 0.80 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.47 
## 
## The root mean square of the residuals (RMSR) is  0.04 
## The df corrected root mean square of the residuals is  0.06 
## 
## The harmonic number of observations is  50 with the empirical chi square  9.84  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  60.87  with prob <  4.8e-05 
## 
## Tucker Lewis Index of factoring reliability =  0.732
## RMSEA index =  0.174  and the 90 % confidence intervals are  0.122 0.233
## BIC =  -33.02
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA4  PA3
## Correlation of (regression) scores with factors   0.94 0.93 0.91 0.95
## Multiple R square of scores with factors          0.89 0.87 0.82 0.91
## Minimum correlation of possible factor scores     0.78 0.74 0.65 0.82
(FA_PA_V_4F_Summary <- FA_PA_V_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | PA1  | PA2  | PA4  | PA3  | Complexity | Uniqueness
## --------------------------------------------------------------
## POTL     | 0.85 |      |      |      |    1.46    |    0.11   
## EXPR     | 0.73 |      |      |      |    1.53    |    0.32   
## ACAD     | 0.71 |      |      |      |    1.53    |    0.36   
## JFIT     | 0.61 |      |      |      |    2.38    |    0.27   
## ORGN     |      | 0.84 |      |      |    1.41    |    0.14   
## COMM     |      | 0.76 |      |      |    1.55    |    0.27   
## CFIT     |      | 0.65 |      |      |    2.22    |    0.24   
## SCON     |      |      | 0.82 |      |    1.39    |    0.21   
## APPR     |      |      | 0.70 |      |    1.67    |    0.35   
## LIKE     |      |      | 0.69 |      |    1.84    |    0.34   
## LETT     |      |      |      | 0.88 |    1.31    |    0.11   
## RESM     |      |      |      | 0.83 |    1.62    |    0.12   
## 
## The 4 latent factors (varimax rotation) accounted for 76.28% of the total variance of the original data (PA1 = 22.93%, PA2 = 19.92%, PA4 = 18.41%, PA3 = 15.03%).
summary(FA_PA_V_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA4 |   PA3
## ---------------------------------------------------------------
## Eigenvalues                     | 6.152 | 1.259 | 0.943 | 0.800
## Variance Explained              | 0.229 | 0.199 | 0.184 | 0.150
## Variance Explained (Cumulative) | 0.229 | 0.429 | 0.613 | 0.763
## Variance Explained (Proportion) | 0.301 | 0.261 | 0.241 | 0.197
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_V_4F_Residual <- residuals(FA_PA_V_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.04    NA                                                      
## COMM  0.07  0.01    NA                                                
## CFIT -0.06 -0.02 -0.05    NA                                          
## EXPR  0.05 -0.03  0.01 -0.05    NA                                    
## JFIT -0.07 -0.03 -0.07  0.15 -0.01    NA                              
## LETT -0.03 -0.01 -0.01  0.00  0.02  0.00    NA                        
## LIKE -0.03 -0.02 -0.03  0.02 -0.03  0.07  0.02    NA                  
## ORGN  0.03  0.02  0.08 -0.05  0.04 -0.06  0.01 -0.03    NA            
## POTL  0.05  0.03  0.01 -0.02  0.00 -0.03  0.01 -0.01  0.01    NA      
## RESM  0.02  0.03  0.02  0.01 -0.01 -0.01  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.06 -0.01 -0.03  0.04  0.04  0.03 -0.01  0.05 -0.01 -0.03 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_V_4F_RMS <- FA_PA_V_4F$rms)
## [1] 0.03861068
(FA_PA_V_4F_TLI <- FA_PA_V_4F$TLI)
## [1] 0.7317578
(FA_PA_V_4F_BIC <- FA_PA_V_4F$BIC)
## [1] -33.01886
(FA_PA_V_4F_MaxResidual   <- max(abs(FA_PA_V_4F_Residual),na.rm=TRUE))
## [1] 0.1504566
(FA_PA_V_4F_HighResidual  <- sum(FA_PA_V_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_PA_V_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_V_4F_HighResidualRate <- FA_PA_V_4F_HighResidual/FA_PA_V_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Varimax Rotation : 4 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.87      0.87    0.85      0.69 6.7 0.034  6.9 1.4     0.62
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.79  0.87  0.92
## Duhachek  0.80  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## ORGN      0.74      0.74    0.59      0.59  2.9    0.073    NA  0.59
## COMM      0.77      0.77    0.62      0.62  3.3    0.066    NA  0.62
## CFIT      0.92      0.93    0.86      0.86 12.5    0.021    NA  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.93  0.93  0.91   0.83  6.9 1.6
## COMM 50  0.91  0.92  0.89   0.80  6.9 1.5
## CFIT 50  0.84  0.83  0.65   0.63  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_V_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 4,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_V_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Varimax rotation
# with 5 factors
##################################
(FA_PA_V_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="pa",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       PA5  PA4   PA2  PA3  PA1   h2    u2 com
## ACAD 0.82 0.21  0.21 0.14 0.14 0.79 0.208 1.4
## APPR 0.27 0.66  0.32 0.18 0.05 0.64 0.355 2.0
## COMM 0.14 0.25  0.83 0.21 0.19 0.86 0.143 1.5
## CFIT 0.29 0.21  0.38 0.20 0.74 0.86 0.144 2.2
## EXPR 0.70 0.17 -0.06 0.33 0.19 0.67 0.331 1.8
## JFIT 0.37 0.24  0.23 0.21 0.80 0.93 0.065 2.0
## LETT 0.17 0.07  0.18 0.89 0.21 0.89 0.105 1.3
## LIKE 0.16 0.72  0.25 0.19 0.24 0.69 0.306 1.8
## ORGN 0.09 0.32  0.83 0.08 0.26 0.89 0.115 1.6
## POTL 0.78 0.28  0.18 0.13 0.36 0.87 0.132 1.9
## RESM 0.28 0.31  0.13 0.82 0.10 0.87 0.127 1.6
## SCON 0.22 0.86  0.16 0.09 0.17 0.85 0.153 1.3
## 
##                        PA5  PA4  PA2  PA3  PA1
## SS loadings           2.26 2.21 1.90 1.82 1.63
## Proportion Var        0.19 0.18 0.16 0.15 0.14
## Cumulative Var        0.19 0.37 0.53 0.68 0.82
## Proportion Explained  0.23 0.23 0.19 0.19 0.17
## Cumulative Proportion 0.23 0.46 0.65 0.83 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.47 
## 
## The root mean square of the residuals (RMSR) is  0.01 
## The df corrected root mean square of the residuals is  0.03 
## 
## The harmonic number of observations is  50 with the empirical chi square  1.45  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  19.16  with prob <  0.26 
## 
## Tucker Lewis Index of factoring reliability =  0.965
## RMSEA index =  0.06  and the 90 % confidence intervals are  0 0.153
## BIC =  -43.43
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    PA5  PA4  PA2  PA3  PA1
## Correlation of (regression) scores with factors   0.92 0.92 0.94 0.95 0.94
## Multiple R square of scores with factors          0.85 0.85 0.88 0.91 0.88
## Minimum correlation of possible factor scores     0.71 0.70 0.77 0.82 0.76
(FA_PA_V_5F_Summary <- FA_PA_V_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | PA5  | PA4  | PA2  | PA3  | PA1  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.82 |      |      |      |      |    1.41    |    0.21   
## POTL     | 0.78 |      |      |      |      |    1.92    |    0.13   
## EXPR     | 0.70 |      |      |      |      |    1.77    |    0.33   
## SCON     |      | 0.86 |      |      |      |    1.32    |    0.15   
## LIKE     |      | 0.72 |      |      |      |    1.75    |    0.31   
## APPR     |      | 0.66 |      |      |      |    1.99    |    0.36   
## COMM     |      |      | 0.83 |      |      |    1.49    |    0.14   
## ORGN     |      |      | 0.83 |      |      |    1.57    |    0.11   
## LETT     |      |      |      | 0.89 |      |    1.29    |    0.11   
## RESM     |      |      |      | 0.82 |      |    1.63    |    0.13   
## JFIT     |      |      |      |      | 0.80 |    1.97    |    0.07   
## CFIT     |      |      |      |      | 0.74 |    2.24    |    0.14   
## 
## The 5 latent factors (varimax rotation) accounted for 81.80% of the total variance of the original data (PA5 = 18.81%, PA4 = 18.44%, PA2 = 15.86%, PA3 = 15.15%, PA1 = 13.55%).
summary(FA_PA_V_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA5 |   PA4 |   PA2 |   PA3 |   PA1
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.211 | 1.294 | 0.967 | 0.867 | 0.477
## Variance Explained              | 0.188 | 0.184 | 0.159 | 0.152 | 0.135
## Variance Explained (Cumulative) | 0.188 | 0.372 | 0.531 | 0.683 | 0.818
## Variance Explained (Proportion) | 0.230 | 0.225 | 0.194 | 0.185 | 0.166
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_V_5F_Residual <- residuals(FA_PA_V_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.01 -0.02    NA                                                
## CFIT  0.01  0.00  0.00    NA                                          
## EXPR  0.00 -0.04  0.00 -0.03    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.02 -0.01 -0.01  0.00  0.02 -0.01    NA                        
## LIKE  0.01  0.00  0.00 -0.02 -0.02  0.02  0.02    NA                  
## ORGN -0.01  0.01  0.00  0.00  0.02  0.00  0.02  0.00    NA            
## POTL -0.01  0.02 -0.01  0.01  0.01 -0.01  0.01  0.01  0.00    NA      
## RESM  0.01  0.03  0.01  0.02 -0.02  0.00  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.02 -0.01  0.01  0.01  0.05 -0.01 -0.01  0.01  0.01 -0.02 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_V_5F_RMS <- FA_PA_V_5F$rms)
## [1] 0.01483907
(FA_PA_V_5F_TLI <- FA_PA_V_5F$TLI)
## [1] 0.9648451
(FA_PA_V_5F_BIC <- FA_PA_V_5F$BIC)
## [1] -43.43181
(FA_PA_V_5F_MaxResidual   <- max(abs(FA_PA_V_5F_Residual),na.rm=TRUE))
## [1] 0.04835397
(FA_PA_V_5F_HighResidual  <- sum(FA_PA_V_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 0
(FA_PA_V_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_V_5F_HighResidualRate <- FA_PA_V_5F_HighResidual/FA_PA_V_5F_TotalResidual)
## [1] 0
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Varimax Rotation : 5 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("COMM","ORGN")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("COMM", "ORGN")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_V_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 5,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_V_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_PA_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Varimax Rotation : 3 Factors",
           cex=0.75)
fa.diagram(FA_PA_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Varimax Rotation : 4 Factors",
           cex=0.75)
fa.diagram(FA_PA_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Varimax Rotation : 5 Factors",
           cex=0.75)

1.6.2 Principal Axes Factor Extraction and Promax Rotation (FA_PA_P)


[A] Appplying Principal Axes factor extraction and Promax rotation, an evaluation was conducted using a set of empirical guidelines to determine the optimal number of factors to be retained for exploratory factor analysis. It was determined that:
     [A.1] 4 factors would be sufficient for an optimal balance between comprehensiveness and parsimony.
     [A.2] To ensure that both under-extraction and over-extraction are assessed, models with 3, 4 and 5 factors were sequentially evaluated for their interpretability and theoretical meaningfulness.
     [A.3] The choice of 4 factors was supported by maximum consensus (35.71%) from 5 (Bentler, Beta, Parallel Analysis, Kaiser Criterion and Standardized Scree) among 14 methods.

[B] Results for the exploratory factor analysis using a 3-Factor Structure were as follows:
     [B.1] Standardized Root Mean Square of the Residual = 0.07
     [B.2] Tucker-Lewis Fit Index = 0.62
     [B.3] Bayesian Information Criterion = -22.76
     [B.4] High Residual Rate = 0.27
     [B.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [B.5.1] ORGN: Loading = 1.04, Communality = 0.79
            [B.5.2] COMM: Loading = 0.91, Communality = 0.69
            [B.5.3] LIKE: Loading = 0.64, Communality = 0.54
            [B.5.4] APPR: Loading = 0.59, Communality = 0.50
            [B.5.5] SCON: Loading = 0.57, Communality = 0.51
            [B.5.6] CFIT: Loading = 0.52, Communality = 0.61
            [B.5.7] Cronbach’s Alpha = 0.88
     [B.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [B.6.1] POTL: Loading = 0.95, Communality = 0.87
            [B.6.2] EXPR: Loading = 0.88, Communality = 0.69
            [B.6.3] ACAD: Loading = 0.82, Communality = 0.65
            [B.6.4] JFIT: Loading = 0.48, Communality = 0.64
            [B.6.5] Cronbach’s Alpha = 0.88
     [B.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [B.7.1] LETT: Loading = 0.94, Communality = 0.86
            [B.7.2] RESM: Loading = 0.82, Communality = 0.83
            [B.7.3] Cronbach’s Alpha = 0.91
     [B.8] Correlation between factors ranged from 0.48 to 0.64

[C] Results for the exploratory factor analysis using a 4-Factor Structure were as follows:
     [C.1] Standardized Root Mean Square of the Residual = 0.04
     [C.2] Tucker-Lewis Fit Index = 0.73
     [C.3] Bayesian Information Criterion = -33.02
     [C.4] High Residual Rate = 0.15
     [C.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [C.5.1] POTL: Loading = 0.94, Communality = 0.89
            [C.5.2] EXPR: Loading = 0.81, Communality = 0.68
            [C.5.3] ACAD: Loading = 0.77, Communality = 0.64
            [C.5.4] JFIT: Loading = 0.57, Communality = 0.73
            [C.5.5] Cronbach’s Alpha = 0.88
     [C.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [C.6.1] ORGN: Loading = 0.92, Communality = 0.86
            [C.6.2] COMM: Loading = 0.82, Communality = 0.73
            [C.6.3] CFIT: Loading = 0.64, Communality = 0.76
            [C.6.4] Cronbach’s Alpha = 0.87
     [C.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [C.7.1] SCON: Loading = 0.87, Communality = 0.79
            [C.7.2] APPR: Loading = 0.72, Communality = 0.65
            [C.7.3] LIKE: Loading = 0.68, Communality = 0.66
            [C.7.4] Cronbach’s Alpha = 0.87
     [C.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [C.8.1] LETT: Loading = 0.95, Communality = 0.89
            [C.8.2] RESM: Loading = 0.85, Communality = 0.88
            [C.8.3] Cronbach’s Alpha = 0.91
     [C.9] Correlation between factors ranged from 0.41 to 0.56

[D] Results for the exploratory factor analysis using a 5-Factor Structure were as follows:
     [D.1] Standardized Root Mean Square of the Residual = 0.02
     [D.2] Tucker-Lewis Fit Index = 0.96
     [D.3] Bayesian Information Criterion = -43.43
     [D.4] High Residual Rate = 0.00
     [D.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [D.5.1] ACAD: Loading = 0.95, Communality = 0.79
            [D.5.2] POTL: Loading = 0.80, Communality = 0.87
            [D.5.3] EXPR: Loading = 0.73, Communality = 0.67
            [C.5.4] Cronbach’s Alpha = 0.89
     [D.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [D.6.1] SCON: Loading = 1.00, Communality = 0.85
            [D.6.2] LIKE: Loading = 0.78, Communality = 0.69
            [D.6.3] APPR: Loading = 0.67, Communality = 0.64
            [C.6.4] Cronbach’s Alpha = 0.87
     [D.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [D.7.1] COMM: Loading = 0.91, Communality = 0.86
            [D.7.2] ORGN: Loading = 0.87, Communality = 0.89
            [C.7.3] Cronbach’s Alpha = 0.92
     [D.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [D.8.1] LETT: Loading = 0.91, Communality = 0.89
            [D.8.2] RESM: Loading = 0.81, Communality = 0.87
            [C.8.3] Cronbach’s Alpha = 0.91
     [D.9] Factor 5 was a latent variable with higher loading towards the following descriptors:
            [D.9.1] JFIT: Loading = 0.96, Communality = 0.93
            [D.9.2] CFIT: Loading = 0.85, Communality = 0.86
            [C.9.3] Cronbach’s Alpha = 0.94
     [D.10] Correlation between factors ranged from 0.36 to 0.61

Code Chunk | Output
##################################
# Implementing various procedures for determining
# factor retention based on
# the maximum consensus between methods
##################################
(FA_PA_P_MethodAgreementProcedure <- parameters::n_factors(DPA.Descriptors.Numeric,
                                                           algorithm = "pa",
                                                           rotation = "promax"))
## # Method Agreement Procedure:
## 
## The choice of 4 dimensions is supported by 5 (35.71%) methods out of 14 (Bentler, beta, Parallel analysis, Kaiser criterion, Scree (SE)).
as.data.frame(FA_PA_P_MethodAgreementProcedure)
##    n_Factors              Method              Family
## 1          1 Acceleration factor               Scree
## 2          1          Scree (R2)            Scree_SE
## 3          2 Optimal coordinates               Scree
## 4          3                 CNG                 CNG
## 5          4             Bentler             Bentler
## 6          4                beta Multiple_regression
## 7          4   Parallel analysis               Scree
## 8          4    Kaiser criterion               Scree
## 9          4          Scree (SE)            Scree_SE
## 10         6            Bartlett             Barlett
## 11         6                   t Multiple_regression
## 12         6                   p Multiple_regression
## 13         7            Anderson             Barlett
## 14         7              Lawley             Barlett
##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Promax rotation
# with 3 factors
##################################
(FA_PA_P_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="pa",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        PA1   PA2   PA3   h2   u2 com
## ACAD  0.02  0.82 -0.06 0.65 0.35 1.0
## APPR  0.59  0.15  0.02 0.50 0.50 1.1
## COMM  0.91 -0.23  0.10 0.69 0.31 1.1
## CFIT  0.52  0.32  0.04 0.61 0.39 1.7
## EXPR -0.31  0.88  0.19 0.69 0.31 1.3
## JFIT  0.37  0.48  0.04 0.64 0.36 1.9
## LETT  0.03 -0.05  0.94 0.86 0.14 1.0
## LIKE  0.64  0.12  0.03 0.54 0.46 1.1
## ORGN  1.04 -0.24 -0.05 0.79 0.21 1.1
## POTL  0.08  0.95 -0.13 0.87 0.13 1.1
## RESM  0.07  0.09  0.82 0.83 0.17 1.0
## SCON  0.57  0.24 -0.07 0.51 0.49 1.4
## 
##                        PA1  PA2  PA3
## SS loadings           3.56 2.92 1.70
## Proportion Var        0.30 0.24 0.14
## Cumulative Var        0.30 0.54 0.68
## Proportion Explained  0.44 0.36 0.21
## Cumulative Proportion 0.44 0.79 1.00
## 
##  With factor correlations of 
##      PA1  PA2  PA3
## PA1 1.00 0.64 0.48
## PA2 0.64 1.00 0.55
## PA3 0.48 0.55 1.00
## 
## Mean item complexity =  1.2
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.52 
## 
## The root mean square of the residuals (RMSR) is  0.07 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  35.54  with prob <  0.35 
## The total number of observations was  50  with Likelihood Chi Square =  106.33  with prob <  1.2e-09 
## 
## Tucker Lewis Index of factoring reliability =  0.619
## RMSEA index =  0.21  and the 90 % confidence intervals are  0.168 0.259
## BIC =  -22.76
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA3
## Correlation of (regression) scores with factors   0.96 0.97 0.96
## Multiple R square of scores with factors          0.93 0.93 0.91
## Minimum correlation of possible factor scores     0.85 0.86 0.83
(FA_PA_P_3F_Summary <- FA_PA_P_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | PA1  | PA2  | PA3  | Complexity | Uniqueness
## -------------------------------------------------------
## ORGN     | 1.04 |      |      |    1.11    |    0.21   
## COMM     | 0.91 |      |      |    1.15    |    0.31   
## LIKE     | 0.64 |      |      |    1.07    |    0.46   
## APPR     | 0.59 |      |      |    1.13    |    0.50   
## SCON     | 0.57 |      |      |    1.37    |    0.49   
## CFIT     | 0.52 |      |      |    1.67    |    0.39   
## POTL     |      | 0.95 |      |    1.05    |    0.13   
## EXPR     |      | 0.88 |      |    1.34    |    0.31   
## ACAD     |      | 0.82 |      |    1.01    |    0.35   
## JFIT     |      | 0.48 |      |    1.91    |    0.36   
## LETT     |      |      | 0.94 |    1.01    |    0.14   
## RESM     |      |      | 0.82 |    1.04    |    0.17   
## 
## The 3 latent factors (promax rotation) accounted for 68.18% of the total variance of the original data (PA1 = 29.69%, PA2 = 24.31%, PA3 = 14.19%).
summary(FA_PA_P_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA3
## -------------------------------------------------------
## Eigenvalues                     | 6.069 | 1.209 | 0.903
## Variance Explained              | 0.297 | 0.243 | 0.142
## Variance Explained (Cumulative) | 0.297 | 0.540 | 0.682
## Variance Explained (Proportion) | 0.435 | 0.357 | 0.208
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_P_3F_Residual <- residuals(FA_PA_P_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.07 -0.06    NA                                                
## CFIT -0.04 -0.13  0.02    NA                                          
## EXPR  0.04 -0.02  0.00 -0.06    NA                                    
## JFIT -0.06 -0.12 -0.01  0.27 -0.01    NA                              
## LETT -0.02 -0.05  0.01  0.04  0.02  0.03    NA                        
## LIKE -0.04  0.12 -0.09 -0.08 -0.03 -0.02 -0.01    NA                  
## ORGN  0.03 -0.04  0.13  0.04  0.03  0.00  0.03 -0.08    NA            
## POTL  0.04  0.00  0.02  0.03 -0.01  0.01  0.01 -0.03  0.01    NA      
## RESM  0.02  0.09 -0.01 -0.05 -0.01 -0.05  0.00  0.04 -0.06 -0.02    NA
## SCON -0.06  0.20 -0.10 -0.09  0.05 -0.08 -0.07  0.24 -0.08 -0.05  0.06
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_P_3F_RMS <- FA_PA_P_3F$rms)
## [1] 0.07338105
(FA_PA_P_3F_TLI <- FA_PA_P_3F$TLI)
## [1] 0.6191606
(FA_PA_P_3F_BIC <- FA_PA_P_3F$BIC)
## [1] -22.76274
(FA_PA_P_3F_MaxResidual   <- max(abs(FA_PA_P_3F_Residual),na.rm=TRUE))
## [1] 0.2668687
(FA_PA_P_3F_HighResidual  <- sum(FA_PA_P_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 18
(FA_PA_P_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_P_3F_HighResidualRate <- FA_PA_P_3F_HighResidual/FA_PA_P_3F_TotalResidual)
## [1] 0.2727273
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Promax Rotation : 3 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_P_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 3,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_P_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Promax rotation
# with 4 factors
##################################
(FA_PA_P_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="pa",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        PA1   PA2   PA4   PA3   h2   u2 com
## ACAD  0.77 -0.02  0.11 -0.04 0.64 0.36 1.0
## APPR  0.04  0.09  0.72  0.04 0.65 0.35 1.0
## COMM -0.14  0.82  0.11  0.10 0.73 0.27 1.1
## CFIT  0.44  0.64 -0.14  0.01 0.76 0.24 1.9
## EXPR  0.81 -0.28  0.03  0.19 0.68 0.32 1.4
## JFIT  0.57  0.46 -0.10  0.02 0.73 0.27 2.0
## LETT -0.01  0.14 -0.16  0.95 0.89 0.11 1.1
## LIKE  0.02  0.16  0.68  0.05 0.66 0.34 1.1
## ORGN -0.17  0.92  0.17 -0.05 0.86 0.14 1.1
## POTL  0.94  0.04  0.08 -0.13 0.89 0.11 1.1
## RESM  0.04 -0.08  0.20  0.85 0.88 0.12 1.1
## SCON  0.11 -0.01  0.87 -0.09 0.79 0.21 1.1
## 
##                        PA1  PA2  PA4  PA3
## SS loadings           2.85 2.47 2.09 1.74
## Proportion Var        0.24 0.21 0.17 0.15
## Cumulative Var        0.24 0.44 0.62 0.76
## Proportion Explained  0.31 0.27 0.23 0.19
## Cumulative Proportion 0.31 0.58 0.81 1.00
## 
##  With factor correlations of 
##      PA1  PA2  PA4  PA3
## PA1 1.00 0.53 0.52 0.54
## PA2 0.53 1.00 0.56 0.41
## PA4 0.52 0.56 1.00 0.42
## PA3 0.54 0.41 0.42 1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.47 
## 
## The root mean square of the residuals (RMSR) is  0.04 
## The df corrected root mean square of the residuals is  0.06 
## 
## The harmonic number of observations is  50 with the empirical chi square  9.84  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  60.87  with prob <  4.8e-05 
## 
## Tucker Lewis Index of factoring reliability =  0.732
## RMSEA index =  0.174  and the 90 % confidence intervals are  0.122 0.233
## BIC =  -33.02
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA4  PA3
## Correlation of (regression) scores with factors   0.97 0.96 0.95 0.97
## Multiple R square of scores with factors          0.94 0.93 0.89 0.94
## Minimum correlation of possible factor scores     0.88 0.85 0.79 0.88
(FA_PA_P_4F_Summary <- FA_PA_P_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | PA1  | PA2  | PA4  | PA3  | Complexity | Uniqueness
## --------------------------------------------------------------
## POTL     | 0.94 |      |      |      |    1.06    |    0.11   
## EXPR     | 0.81 |      |      |      |    1.36    |    0.32   
## ACAD     | 0.77 |      |      |      |    1.05    |    0.36   
## JFIT     | 0.57 |      |      |      |    1.99    |    0.27   
## ORGN     |      | 0.92 |      |      |    1.14    |    0.14   
## COMM     |      | 0.82 |      |      |    1.13    |    0.27   
## CFIT     |      | 0.64 |      |      |    1.88    |    0.24   
## SCON     |      |      | 0.87 |      |    1.05    |    0.21   
## APPR     |      |      | 0.72 |      |    1.04    |    0.35   
## LIKE     |      |      | 0.68 |      |    1.12    |    0.34   
## LETT     |      |      |      | 0.95 |    1.11    |    0.11   
## RESM     |      |      |      | 0.85 |    1.13    |    0.12   
## 
## The 4 latent factors (promax rotation) accounted for 76.28% of the total variance of the original data (PA1 = 23.74%, PA2 = 20.58%, PA4 = 17.43%, PA3 = 14.53%).
summary(FA_PA_P_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA4 |   PA3
## ---------------------------------------------------------------
## Eigenvalues                     | 6.152 | 1.259 | 0.943 | 0.800
## Variance Explained              | 0.237 | 0.206 | 0.174 | 0.145
## Variance Explained (Cumulative) | 0.237 | 0.443 | 0.618 | 0.763
## Variance Explained (Proportion) | 0.311 | 0.270 | 0.229 | 0.190
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_P_4F_Residual <- residuals(FA_PA_P_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.04    NA                                                      
## COMM  0.07  0.01    NA                                                
## CFIT -0.06 -0.02 -0.05    NA                                          
## EXPR  0.05 -0.03  0.01 -0.05    NA                                    
## JFIT -0.07 -0.03 -0.07  0.15 -0.01    NA                              
## LETT -0.03 -0.01 -0.01  0.00  0.02  0.00    NA                        
## LIKE -0.03 -0.02 -0.03  0.02 -0.03  0.07  0.02    NA                  
## ORGN  0.03  0.02  0.08 -0.05  0.04 -0.06  0.01 -0.03    NA            
## POTL  0.05  0.03  0.01 -0.02  0.00 -0.03  0.01 -0.01  0.01    NA      
## RESM  0.02  0.03  0.02  0.01 -0.01 -0.01  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.06 -0.01 -0.03  0.04  0.04  0.03 -0.01  0.05 -0.01 -0.03 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_P_4F_RMS <- FA_PA_P_4F$rms)
## [1] 0.03861068
(FA_PA_P_4F_TLI <- FA_PA_P_4F$TLI)
## [1] 0.7317578
(FA_PA_P_4F_BIC <- FA_PA_P_4F$BIC)
## [1] -33.01886
(FA_PA_P_4F_MaxResidual   <- max(abs(FA_PA_P_4F_Residual),na.rm=TRUE))
## [1] 0.1504566
(FA_PA_P_4F_HighResidual  <- sum(FA_PA_P_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_PA_P_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_P_4F_HighResidualRate <- FA_PA_P_4F_HighResidual/FA_PA_P_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Promax Rotation : 4 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.87      0.87    0.85      0.69 6.7 0.034  6.9 1.4     0.62
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.79  0.87  0.92
## Duhachek  0.80  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## ORGN      0.74      0.74    0.59      0.59  2.9    0.073    NA  0.59
## COMM      0.77      0.77    0.62      0.62  3.3    0.066    NA  0.62
## CFIT      0.92      0.93    0.86      0.86 12.5    0.021    NA  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.93  0.93  0.91   0.83  6.9 1.6
## COMM 50  0.91  0.92  0.89   0.80  6.9 1.5
## CFIT 50  0.84  0.83  0.65   0.63  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_P_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 4,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_P_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Promax rotation
# with 5 factors
##################################
(FA_PA_P_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="pa",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        PA5   PA4   PA2   PA1   PA3   h2    u2 com
## ACAD  0.95 -0.05  0.16 -0.10 -0.07 0.79 0.208 1.1
## APPR  0.13  0.67  0.18 -0.16  0.03 0.64 0.355 1.4
## COMM  0.04 -0.05  0.91 -0.01  0.10 0.86 0.143 1.0
## CFIT  0.02 -0.01  0.17  0.81  0.02 0.86 0.144 1.1
## EXPR  0.73  0.00 -0.21  0.05  0.20 0.67 0.331 1.3
## JFIT  0.08  0.05 -0.05  0.91  0.02 0.93 0.065 1.0
## LETT -0.06 -0.15  0.08  0.09  0.96 0.89 0.105 1.1
## LIKE -0.11  0.78  0.02  0.13  0.05 0.69 0.306 1.1
## ORGN -0.04  0.08  0.87  0.10 -0.05 0.89 0.115 1.1
## POTL  0.80  0.05  0.02  0.22 -0.11 0.87 0.132 1.2
## RESM  0.07  0.18 -0.02 -0.09  0.85 0.87 0.127 1.1
## SCON -0.01  1.00 -0.11  0.04 -0.09 0.85 0.153 1.0
## 
##                        PA5  PA4  PA2  PA1  PA3
## SS loadings           2.22 2.18 1.85 1.81 1.76
## Proportion Var        0.18 0.18 0.15 0.15 0.15
## Cumulative Var        0.18 0.37 0.52 0.67 0.82
## Proportion Explained  0.23 0.22 0.19 0.18 0.18
## Cumulative Proportion 0.23 0.45 0.64 0.82 1.00
## 
##  With factor correlations of 
##      PA5  PA4  PA2  PA1  PA3
## PA5 1.00 0.57 0.36 0.61 0.52
## PA4 0.57 1.00 0.59 0.52 0.45
## PA2 0.36 0.59 1.00 0.55 0.35
## PA1 0.61 0.52 0.55 1.00 0.46
## PA3 0.52 0.45 0.35 0.46 1.00
## 
## Mean item complexity =  1.1
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.47 
## 
## The root mean square of the residuals (RMSR) is  0.01 
## The df corrected root mean square of the residuals is  0.03 
## 
## The harmonic number of observations is  50 with the empirical chi square  1.45  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  19.16  with prob <  0.26 
## 
## Tucker Lewis Index of factoring reliability =  0.965
## RMSEA index =  0.06  and the 90 % confidence intervals are  0 0.153
## BIC =  -43.43
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    PA5  PA4  PA2  PA1  PA3
## Correlation of (regression) scores with factors   0.96 0.96 0.97 0.97 0.97
## Multiple R square of scores with factors          0.92 0.92 0.93 0.95 0.94
## Minimum correlation of possible factor scores     0.85 0.84 0.86 0.90 0.88
(FA_PA_P_5F_Summary <- FA_PA_P_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | PA5  | PA4  | PA2  | PA1  | PA3  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.95 |      |      |      |      |    1.10    |    0.21   
## POTL     | 0.80 |      |      |      |      |    1.20    |    0.13   
## EXPR     | 0.73 |      |      |      |      |    1.32    |    0.33   
## SCON     |      | 1.00 |      |      |      |    1.04    |    0.15   
## LIKE     |      | 0.78 |      |      |      |    1.10    |    0.31   
## APPR     |      | 0.67 |      |      |      |    1.35    |    0.36   
## COMM     |      |      | 0.91 |      |      |    1.04    |    0.14   
## ORGN     |      |      | 0.87 |      |      |    1.05    |    0.11   
## JFIT     |      |      |      | 0.91 |      |    1.03    |    0.07   
## CFIT     |      |      |      | 0.81 |      |    1.09    |    0.14   
## LETT     |      |      |      |      | 0.96 |    1.09    |    0.11   
## RESM     |      |      |      |      | 0.85 |    1.12    |    0.13   
## 
## The 5 latent factors (promax rotation) accounted for 81.80% of the total variance of the original data (PA5 = 18.48%, PA4 = 18.16%, PA2 = 15.39%, PA1 = 15.12%, PA3 = 14.65%).
summary(FA_PA_P_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA5 |   PA4 |   PA2 |   PA1 |   PA3
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.211 | 1.294 | 0.967 | 0.867 | 0.477
## Variance Explained              | 0.185 | 0.182 | 0.154 | 0.151 | 0.147
## Variance Explained (Cumulative) | 0.185 | 0.366 | 0.520 | 0.672 | 0.818
## Variance Explained (Proportion) | 0.226 | 0.222 | 0.188 | 0.185 | 0.179
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_P_5F_Residual <- residuals(FA_PA_P_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.01 -0.02    NA                                                
## CFIT  0.01  0.00  0.00    NA                                          
## EXPR  0.00 -0.04  0.00 -0.03    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.02 -0.01 -0.01  0.00  0.02 -0.01    NA                        
## LIKE  0.01  0.00  0.00 -0.02 -0.02  0.02  0.02    NA                  
## ORGN -0.01  0.01  0.00  0.00  0.02  0.00  0.02  0.00    NA            
## POTL -0.01  0.02 -0.01  0.01  0.01 -0.01  0.01  0.01  0.00    NA      
## RESM  0.01  0.03  0.01  0.02 -0.02  0.00  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.02 -0.01  0.01  0.01  0.05 -0.01 -0.01  0.01  0.01 -0.02 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_P_5F_RMS <- FA_PA_P_5F$rms)
## [1] 0.01483907
(FA_PA_P_5F_TLI <- FA_PA_P_5F$TLI)
## [1] 0.9648451
(FA_PA_P_5F_BIC <- FA_PA_P_5F$BIC)
## [1] -43.43181
(FA_PA_P_5F_MaxResidual   <- max(abs(FA_PA_P_5F_Residual),na.rm=TRUE))
## [1] 0.04835397
(FA_PA_P_5F_HighResidual  <- sum(FA_PA_P_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 0
(FA_PA_P_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_P_5F_HighResidualRate <- FA_PA_P_5F_HighResidual/FA_PA_P_5F_TotalResidual)
## [1] 0
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Promax Rotation : 5 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("COMM","ORGN")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("COMM", "ORGN")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_P_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 5,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_P_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_PA_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Promax Rotation : 3 Factors",
           cex=0.75)
fa.diagram(FA_PA_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Promax Rotation : 4 Factors",
           cex=0.75)
fa.diagram(FA_PA_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Promax Rotation : 5 Factors",
           cex=0.75)

1.6.3 Maximum Likelihood Factor Extraction and Varimax Rotation (FA_ML_V)


[A] Appplying Maximum Likelihood factor extraction and Varimax rotation, an evaluation was conducted using a set of empirical guidelines to determine the optimal number of factors to be retained for exploratory factor analysis. It was determined that:
     [A.1] 4 factors would be sufficient for an optimal balance between comprehensiveness and parsimony.
     [A.2] To ensure that both under-extraction and over-extraction are assessed, models with 3, 4 and 5 factors were sequentially evaluated for their interpretability and theoretical meaningfulness.
     [A.3] The choice of 4 factors was supported by maximum consensus (26.32%) from 5 (Bentler, Beta, Parallel Analysis, Kaiser Criterion and Standardized Scree) among 19 methods.

[B] Results for the exploratory factor analysis using a 3-Factor Structure were as follows:
     [B.1] Standardized Root Mean Square of the Residual = 0.08
     [B.2] Tucker-Lewis Fit Index = 0.69
     [B.3] Bayesian Information Criterion = -35.60
     [B.4] High Residual Rate = 0.24
     [B.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [B.5.1] POTL: Loading = 0.90, Communality = 0.92
            [B.5.2] ACAD: Loading = 0.76, Communality = 0.67
            [B.5.3] EXPR: Loading = 0.71, Communality = 0.61
            [B.5.4] JFIT: Loading = 0.62, Communality = 0.62
            [B.5.5] Cronbach’s Alpha = 0.88
     [B.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [B.6.1] ORGN: Loading = 0.96, Communality = 0.96
            [B.6.2] COMM: Loading = 0.85, Communality = 0.80
            [B.6.3] CFIT: Loading = 0.56, Communality = 0.62
            [B.6.4] LIKE: Loading = 0.48, Communality = 0.44
            [B.6.5] APPR: Loading = 0.48, Communality = 0.46
            [B.6.6] SCON: Loading = 0.43, Communality = 0.51
            [B.6.7] Cronbach’s Alpha = 0.88
     [B.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [B.7.1] RESM: Loading = 0.93, Communality = 0.83
            [B.7.2] LETT: Loading = 0.78, Communality = 0.71
            [B.7.3] Cronbach’s Alpha = 0.91

[C] Results for the exploratory factor analysis using a 4-Factor Structure were as follows:
     [C.1] Standardized Root Mean Square of the Residual = 0.06
     [C.2] Tucker-Lewis Fit Index = 0.76
     [C.3] Bayesian Information Criterion = -37.51
     [C.4] High Residual Rate = 0.15
     [C.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [C.5.1] JFIT: Loading = 0.87, Communality = 0.91
            [C.5.2] CFIT: Loading = 0.78, Communality = 0.85
            [C.5.3] POTL: Loading = 0.66, Communality = 0.65
            [C.5.4] EXPR: Loading = 0.50, Communality = 0.46
            [C.5.5] ACAD: Loading = 0.49, Communality = 0.45
            [C.5.6] Cronbach’s Alpha = 0.90
     [C.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [C.6.1] SCON: Loading = 0.81, Communality = 0.78
            [C.6.2] APPR: Loading = 0.72, Communality = 0.68
            [C.6.3] LIKE: Loading = 0.67, Communality = 0.65
            [C.6.4] Cronbach’s Alpha = 0.87
     [C.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [C.7.1] ORGN: Loading = 0.91, Communality = 0.97
            [C.7.2] COMM: Loading = 0.79, Communality = 0.79
            [C.7.3] Cronbach’s Alpha = 0.92
     [C.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [C.8.1] RESM: Loading = 0.91, Communality = 1.00
            [C.8.2] LETT: Loading = 0.81, Communality = 0.78
            [C.8.3] Cronbach’s Alpha = 0.91

[D] Results for the exploratory factor analysis using a 5-Factor Structure were as follows:
     [D.1] Standardized Root Mean Square of the Residual = 0.02
     [D.2] Tucker-Lewis Fit Index = 0.99
     [D.3] Bayesian Information Criterion = -45.32
     [D.4] High Residual Rate = 0.03
     [D.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [D.5.1] ACAD: Loading = 0.81, Communality = 0.78
            [D.5.2] POTL: Loading = 0.79, Communality = 0.87
            [D.5.3] EXPR: Loading = 0.69, Communality = 0.64
            [C.5.4] Cronbach’s Alpha = 0.89
     [D.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [D.6.1] SCON: Loading = 0.87, Communality = 0.87
            [D.6.2] LIKE: Loading = 0.71, Communality = 0.68
            [D.6.3] APPR: Loading = 0.65, Communality = 0.65
            [C.6.4] Cronbach’s Alpha = 0.87
     [D.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [D.7.1] ORGN: Loading = 0.89, Communality = 0.96
            [D.7.2] COMM: Loading = 0.79, Communality = 0.80
            [C.7.3] Cronbach’s Alpha = 0.92
     [D.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [D.8.1] RESM: Loading = 0.90, Communality = 1.00
            [D.8.2] LETT: Loading = 0.81, Communality = 0.77
            [C.8.3] Cronbach’s Alpha = 0.91
     [D.9] Factor 5 was a latent variable with higher loading towards the following descriptors:
            [D.9.1] JFIT: Loading = 0.81, Communality = 0.95
            [D.9.2] CFIT: Loading = 0.72, Communality = 0.85
            [C.9.3] Cronbach’s Alpha = 0.94

Code Chunk | Output
##################################
# Implementing various procedures for determining
# factor retention based on
# the maximum consensus between methods
##################################
(FA_ML_V_MethodAgreementProcedure <- parameters::n_factors(DPA.Descriptors.Numeric,
                                                           algorithm = "mle",
                                                           rotation = "varimax"))
## # Method Agreement Procedure:
## 
## The choice of 4 dimensions is supported by 5 (26.32%) methods out of 19 (Bentler, beta, Parallel analysis, Kaiser criterion, Scree (SE)).
as.data.frame(FA_ML_V_MethodAgreementProcedure)
##    n_Factors              Method              Family
## 1          1 Acceleration factor               Scree
## 2          1          Scree (R2)            Scree_SE
## 3          1    VSS complexity 1                 VSS
## 4          2 Optimal coordinates               Scree
## 5          2    VSS complexity 2                 VSS
## 6          3                 CNG                 CNG
## 7          4             Bentler             Bentler
## 8          4                beta Multiple_regression
## 9          4   Parallel analysis               Scree
## 10         4    Kaiser criterion               Scree
## 11         4          Scree (SE)            Scree_SE
## 12         5       Velicer's MAP        Velicers_MAP
## 13         5                 BIC                 BIC
## 14         6            Bartlett             Barlett
## 15         6                   t Multiple_regression
## 16         6                   p Multiple_regression
## 17         6      BIC (adjusted)                 BIC
## 18         7            Anderson             Barlett
## 19         7              Lawley             Barlett
##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Varimax rotation
# with 3 factors
##################################
(FA_ML_V_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="ml",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       ML3  ML2  ML1   h2    u2 com
## ACAD 0.76 0.24 0.20 0.67 0.326 1.3
## APPR 0.36 0.48 0.32 0.46 0.543 2.7
## COMM 0.16 0.85 0.23 0.80 0.203 1.2
## CFIT 0.53 0.56 0.19 0.62 0.377 2.2
## EXPR 0.71 0.04 0.32 0.61 0.385 1.4
## JFIT 0.62 0.45 0.21 0.62 0.379 2.1
## LETT 0.22 0.25 0.78 0.71 0.289 1.4
## LIKE 0.35 0.48 0.29 0.44 0.563 2.6
## ORGN 0.15 0.96 0.07 0.96 0.043 1.1
## POTL 0.90 0.29 0.14 0.92 0.079 1.3
## RESM 0.30 0.19 0.93 1.00 0.005 1.3
## SCON 0.39 0.43 0.25 0.40 0.597 2.6
## 
##                        ML3  ML2  ML1
## SS loadings           3.15 3.04 2.02
## Proportion Var        0.26 0.25 0.17
## Cumulative Var        0.26 0.52 0.68
## Proportion Explained  0.38 0.37 0.25
## Cumulative Proportion 0.38 0.75 1.00
## 
## Mean item complexity =  1.8
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.22 
## 
## The root mean square of the residuals (RMSR) is  0.08 
## The df corrected root mean square of the residuals is  0.11 
## 
## The harmonic number of observations is  50 with the empirical chi square  41.84  with prob <  0.14 
## The total number of observations was  50  with Likelihood Chi Square =  93.49  with prob <  1.1e-07 
## 
## Tucker Lewis Index of factoring reliability =  0.686
## RMSEA index =  0.19  and the 90 % confidence intervals are  0.148 0.24
## BIC =  -35.6
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    ML3  ML2  ML1
## Correlation of (regression) scores with factors   0.96 0.98 0.99
## Multiple R square of scores with factors          0.92 0.96 0.99
## Minimum correlation of possible factor scores     0.84 0.92 0.97
(FA_ML_V_3F_Summary <- FA_ML_V_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | ML3  | ML2  | ML1  | Complexity | Uniqueness
## -------------------------------------------------------
## POTL     | 0.90 |      |      |    1.25    |    0.08   
## ACAD     | 0.76 |      |      |    1.35    |    0.33   
## EXPR     | 0.71 |      |      |    1.39    |    0.39   
## JFIT     | 0.62 |      |      |    2.09    |    0.38   
## ORGN     |      | 0.96 |      |    1.06    |    0.04   
## COMM     |      | 0.85 |      |    1.22    |    0.20   
## CFIT     |      | 0.56 |      |    2.24    |    0.38   
## LIKE     |      | 0.48 |      |    2.56    |    0.56   
## APPR     |      | 0.48 |      |    2.67    |    0.54   
## SCON     |      | 0.43 |      |    2.60    |    0.60   
## RESM     |      |      | 0.93 |    1.29    |  4.98e-03 
## LETT     |      |      | 0.78 |    1.38    |    0.29   
## 
## The 3 latent factors (varimax rotation) accounted for 68.42% of the total variance of the original data (ML3 = 26.22%, ML2 = 25.33%, ML1 = 16.87%).
summary(FA_ML_V_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML2 |   ML1
## -------------------------------------------------------
## Eigenvalues                     | 6.079 | 1.261 | 0.922
## Variance Explained              | 0.262 | 0.253 | 0.169
## Variance Explained (Cumulative) | 0.262 | 0.515 | 0.684
## Variance Explained (Proportion) | 0.383 | 0.370 | 0.247
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_V_3F_Residual <- residuals(FA_ML_V_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.02    NA                                                      
## COMM  0.04 -0.04    NA                                                
## CFIT -0.07 -0.10 -0.01    NA                                          
## EXPR  0.05 -0.07 -0.02 -0.06    NA                                    
## JFIT -0.08 -0.09 -0.02  0.27  0.00    NA                              
## LETT -0.06 -0.14 -0.02  0.05  0.06  0.06    NA                        
## LIKE -0.04  0.19 -0.04 -0.02 -0.06  0.04 -0.06    NA                  
## ORGN  0.00  0.00  0.00 -0.01  0.01 -0.01  0.01 -0.01    NA            
## POTL  0.01  0.01  0.00  0.00  0.00 -0.01  0.00 -0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.04  0.27 -0.05 -0.03  0.03 -0.02 -0.15  0.34  0.00 -0.01  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_V_3F_RMS <- FA_ML_V_3F$rms)
## [1] 0.07961754
(FA_ML_V_3F_TLI <- FA_ML_V_3F$TLI)
## [1] 0.6858498
(FA_ML_V_3F_BIC <- FA_ML_V_3F$BIC)
## [1] -35.60434
(FA_ML_V_3F_MaxResidual   <- max(abs(FA_ML_V_3F_Residual),na.rm=TRUE))
## [1] 0.3363878
(FA_ML_V_3F_HighResidual  <- sum(FA_ML_V_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 16
(FA_ML_V_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_V_3F_HighResidualRate <- FA_ML_V_3F_HighResidual/FA_ML_V_3F_TotalResidual)
## [1] 0.2424242
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Varimax Rotation : 3 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","ACAD","EXPR","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "ACAD", "EXPR", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_V_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 3,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_V_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Varimax rotation
# with 4 factors
##################################
(FA_ML_V_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="ml",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       ML3  ML4   ML2  ML1   h2    u2 com
## ACAD 0.49 0.38  0.12 0.24 0.45 0.546 2.5
## APPR 0.18 0.72  0.29 0.22 0.68 0.325 1.7
## COMM 0.21 0.26  0.79 0.23 0.79 0.206 1.6
## CFIT 0.78 0.16  0.42 0.19 0.85 0.148 1.8
## EXPR 0.50 0.30 -0.07 0.35 0.46 0.535 2.6
## JFIT 0.87 0.19  0.29 0.19 0.91 0.089 1.4
## LETT 0.27 0.06  0.22 0.81 0.78 0.224 1.4
## LIKE 0.31 0.67  0.27 0.17 0.65 0.350 1.9
## ORGN 0.23 0.30  0.91 0.06 0.97 0.027 1.4
## POTL 0.66 0.40  0.15 0.18 0.65 0.347 1.9
## RESM 0.22 0.33  0.10 0.91 1.00 0.005 1.4
## SCON 0.27 0.81  0.19 0.10 0.78 0.220 1.4
## 
##                        ML3  ML4  ML2  ML1
## SS loadings           2.71 2.36 2.00 1.91
## Proportion Var        0.23 0.20 0.17 0.16
## Cumulative Var        0.23 0.42 0.59 0.75
## Proportion Explained  0.30 0.26 0.22 0.21
## Cumulative Proportion 0.30 0.56 0.79 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.36 
## 
## The root mean square of the residuals (RMSR) is  0.06 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  22.17  with prob <  0.57 
## The total number of observations was  50  with Likelihood Chi Square =  56.38  with prob <  2e-04 
## 
## Tucker Lewis Index of factoring reliability =  0.764
## RMSEA index =  0.163  and the 90 % confidence intervals are  0.11 0.223
## BIC =  -37.51
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    ML3  ML4  ML2  ML1
## Correlation of (regression) scores with factors   0.95 0.91 0.97 0.99
## Multiple R square of scores with factors          0.91 0.83 0.95 0.98
## Minimum correlation of possible factor scores     0.82 0.65 0.90 0.95
(FA_ML_V_4F_Summary <- FA_ML_V_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | ML3  | ML4  | ML2  | ML1  | Complexity | Uniqueness
## --------------------------------------------------------------
## JFIT     | 0.87 |      |      |      |    1.43    |    0.09   
## CFIT     | 0.78 |      |      |      |    1.79    |    0.15   
## POTL     | 0.66 |      |      |      |    1.94    |    0.35   
## EXPR     | 0.50 |      |      |      |    2.56    |    0.54   
## ACAD     | 0.49 |      |      |      |    2.54    |    0.55   
## SCON     |      | 0.81 |      |      |    1.37    |    0.22   
## APPR     |      | 0.72 |      |      |    1.66    |    0.32   
## LIKE     |      | 0.67 |      |      |    1.90    |    0.35   
## ORGN     |      |      | 0.91 |      |    1.37    |    0.03   
## COMM     |      |      | 0.79 |      |    1.58    |    0.21   
## RESM     |      |      |      | 0.91 |    1.41    |  5.00e-03 
## LETT     |      |      |      | 0.81 |    1.39    |    0.22   
## 
## The 4 latent factors (varimax rotation) accounted for 74.82% of the total variance of the original data (ML3 = 22.58%, ML4 = 19.64%, ML2 = 16.70%, ML1 = 15.90%).
summary(FA_ML_V_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML4 |   ML2 |   ML1
## ---------------------------------------------------------------
## Eigenvalues                     | 6.146 | 1.248 | 0.890 | 0.846
## Variance Explained              | 0.226 | 0.196 | 0.167 | 0.159
## Variance Explained (Cumulative) | 0.226 | 0.422 | 0.589 | 0.748
## Variance Explained (Proportion) | 0.302 | 0.263 | 0.223 | 0.212
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_V_4F_Residual <- residuals(FA_ML_V_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.05 -0.01    NA                                                
## CFIT -0.04  0.00  0.00    NA                                          
## EXPR  0.24 -0.05 -0.02 -0.08    NA                                    
## JFIT -0.04  0.00  0.00  0.01 -0.01    NA                              
## LETT -0.04 -0.03 -0.03 -0.01  0.06  0.00    NA                        
## LIKE -0.08 -0.01  0.00 -0.01 -0.09  0.03  0.04    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.26  0.03  0.02 -0.02  0.20 -0.02  0.00 -0.05  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.08 -0.01 -0.01  0.02  0.00  0.00 -0.01  0.05  0.00 -0.05  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_V_4F_RMS <- FA_ML_V_4F$rms)
## [1] 0.05795189
(FA_ML_V_4F_TLI <- FA_ML_V_4F$TLI)
## [1] 0.7644223
(FA_ML_V_4F_BIC <- FA_ML_V_4F$BIC)
## [1] -37.50857
(FA_ML_V_4F_MaxResidual   <- max(abs(FA_ML_V_4F_Residual),na.rm=TRUE))
## [1] 0.2590579
(FA_ML_V_4F_HighResidual  <- sum(FA_ML_V_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_ML_V_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_V_4F_HighResidualRate <- FA_ML_V_4F_HighResidual/FA_ML_V_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Varimax Rotation : 4 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT","POTL","EXPR","ACAD")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT", "POTL", 
##     "EXPR", "ACAD")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##        0.9       0.9    0.92      0.64 8.8 0.024  7.2 1.2     0.66
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84   0.9  0.94
## Duhachek  0.85   0.9  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.86      0.87    0.86      0.62 6.5    0.034 0.021  0.66
## CFIT      0.88      0.88    0.87      0.66 7.6    0.028 0.011  0.69
## POTL      0.85      0.85    0.88      0.58 5.6    0.036 0.029  0.53
## EXPR      0.89      0.89    0.91      0.68 8.5    0.025 0.022  0.68
## ACAD      0.88      0.88    0.90      0.64 7.3    0.029 0.028  0.68
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.88  0.87  0.86   0.80  7.0 1.6
## CFIT 50  0.84  0.82  0.80   0.72  6.9 1.6
## POTL 50  0.91  0.92  0.90   0.85  7.3 1.4
## EXPR 50  0.76  0.78  0.71   0.64  7.3 1.4
## ACAD 50  0.81  0.83  0.78   0.72  7.4 1.3
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_V_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 4,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_V_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Varimax rotation
# with 5 factors
##################################
(FA_ML_V_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="ml",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       ML5  ML4   ML2  ML1  ML3   h2    u2 com
## ACAD 0.81 0.20  0.20 0.17 0.14 0.78 0.218 1.4
## APPR 0.28 0.65  0.31 0.21 0.05 0.65 0.353 2.1
## COMM 0.14 0.25  0.79 0.24 0.20 0.80 0.196 1.6
## CFIT 0.30 0.22  0.37 0.21 0.72 0.85 0.154 2.3
## EXPR 0.69 0.19 -0.04 0.29 0.20 0.64 0.362 1.7
## JFIT 0.37 0.23  0.23 0.21 0.81 0.95 0.050 1.9
## LETT 0.19 0.07  0.20 0.81 0.21 0.77 0.229 1.4
## LIKE 0.17 0.71  0.24 0.18 0.25 0.68 0.319 1.8
## ORGN 0.10 0.31  0.89 0.07 0.25 0.96 0.035 1.5
## POTL 0.79 0.27  0.18 0.12 0.35 0.87 0.132 1.8
## RESM 0.27 0.30  0.10 0.90 0.10 1.00 0.005 1.5
## SCON 0.22 0.87  0.17 0.09 0.16 0.87 0.130 1.3
## 
##                        ML5  ML4  ML2  ML1  ML3
## SS loadings           2.29 2.18 1.92 1.82 1.61
## Proportion Var        0.19 0.18 0.16 0.15 0.13
## Cumulative Var        0.19 0.37 0.53 0.68 0.82
## Proportion Explained  0.23 0.22 0.20 0.19 0.16
## Cumulative Proportion 0.23 0.45 0.65 0.84 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.42 
## 
## The root mean square of the residuals (RMSR) is  0.02 
## The df corrected root mean square of the residuals is  0.04 
## 
## The harmonic number of observations is  50 with the empirical chi square  2.44  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  17.27  with prob <  0.37 
## 
## Tucker Lewis Index of factoring reliability =  0.986
## RMSEA index =  0.034  and the 90 % confidence intervals are  0 0.141
## BIC =  -45.32
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    ML5  ML4  ML2  ML1  ML3
## Correlation of (regression) scores with factors   0.92 0.93 0.97 0.99 0.95
## Multiple R square of scores with factors          0.85 0.86 0.94 0.98 0.90
## Minimum correlation of possible factor scores     0.71 0.72 0.88 0.96 0.80
(FA_ML_V_5F_Summary <- FA_ML_V_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | ML5  | ML4  | ML2  | ML1  | ML3  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.81 |      |      |      |      |    1.40    |    0.22   
## POTL     | 0.79 |      |      |      |      |    1.84    |    0.13   
## EXPR     | 0.69 |      |      |      |      |    1.71    |    0.36   
## SCON     |      | 0.87 |      |      |      |    1.30    |    0.13   
## LIKE     |      | 0.71 |      |      |      |    1.81    |    0.32   
## APPR     |      | 0.65 |      |      |      |    2.14    |    0.35   
## ORGN     |      |      | 0.89 |      |      |    1.45    |    0.04   
## COMM     |      |      | 0.79 |      |      |    1.62    |    0.20   
## RESM     |      |      |      | 0.90 |      |    1.47    |  4.99e-03 
## LETT     |      |      |      | 0.81 |      |    1.40    |    0.23   
## JFIT     |      |      |      |      | 0.81 |    1.94    |    0.05   
## CFIT     |      |      |      |      | 0.72 |    2.34    |    0.15   
## 
## The 5 latent factors (varimax rotation) accounted for 81.81% of the total variance of the original data (ML5 = 19.05%, ML4 = 18.17%, ML2 = 15.99%, ML1 = 15.16%, ML3 = 13.44%).
summary(FA_ML_V_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML5 |   ML4 |   ML2 |   ML1 |   ML3
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.215 | 1.301 | 0.958 | 0.877 | 0.477
## Variance Explained              | 0.190 | 0.182 | 0.160 | 0.152 | 0.134
## Variance Explained (Cumulative) | 0.190 | 0.372 | 0.532 | 0.684 | 0.818
## Variance Explained (Proportion) | 0.233 | 0.222 | 0.195 | 0.185 | 0.164
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_V_5F_Residual <- residuals(FA_ML_V_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.02 -0.01    NA                                                
## CFIT  0.00  0.00  0.00    NA                                          
## EXPR  0.00 -0.07 -0.03 -0.05    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.04 -0.04 -0.03 -0.01  0.07  0.00    NA                        
## LIKE  0.01  0.01  0.01 -0.03 -0.04  0.01  0.03    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.00  0.01  0.00  0.01  0.01  0.00  0.01  0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.01 -0.01  0.00  0.01  0.04  0.00 -0.01  0.00  0.00  0.00  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_V_5F_RMS <- FA_ML_V_5F$rms)
## [1] 0.01923904
(FA_ML_V_5F_TLI <- FA_ML_V_5F$TLI)
## [1] 0.9858829
(FA_ML_V_5F_BIC <- FA_ML_V_5F$BIC)
## [1] -45.32318
(FA_ML_V_5F_MaxResidual   <- max(abs(FA_ML_V_5F_Residual),na.rm=TRUE))
## [1] 0.0733741
(FA_ML_V_5F_HighResidual  <- sum(FA_ML_V_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 2
(FA_ML_V_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_V_5F_HighResidualRate <- FA_ML_V_5F_HighResidual/FA_ML_V_5F_TotalResidual)
## [1] 0.03030303
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Varimax Rotation : 5 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_V_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 5,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_V_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_ML_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Varimax Rotation : 3 Factors",
           cex=0.75)
fa.diagram(FA_ML_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Varimax Rotation : 4 Factors",
           cex=0.75)
fa.diagram(FA_ML_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Varimax Rotation : 5 Factors",
           cex=0.75)

1.6.4 Maximum Likelihood Factor Extraction and Promax Rotation (FA_ML_P)


[A] Appplying Maximum Likelihood factor extraction and Promax rotation, an evaluation was conducted using a set of empirical guidelines to determine the optimal number of factors to be retained for exploratory factor analysis. It was determined that:
     [A.1] 4 factors would be sufficient for an optimal balance between comprehensiveness and parsimony.
     [A.2] To ensure that both under-extraction and over-extraction are assessed, models with 3, 4 and 5 factors were sequentially evaluated for their interpretability and theoretical meaningfulness.
     [A.3] The choice of 4 factors was supported by maximum consensus (26.32%) from 5 (Bentler, Beta, Parallel Analysis, Kaiser Criterion and Standardized Scree) among 19 methods.

[B] Results for the exploratory factor analysis using a 3-Factor Structure were as follows:
     [B.1] Standardized Root Mean Square of the Residual = 0.08
     [B.2] Tucker-Lewis Fit Index = 0.69
     [B.3] Bayesian Information Criterion = -35.60
     [B.4] High Residual Rate = 0.24
     [B.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [B.5.1] POTL: Loading = 1.08, Communality = 0.92
            [B.5.2] ACAD: Loading = 0.88, Communality = 0.67
            [B.5.3] EXPR: Loading = 0.85, Communality = 0.61
            [B.5.4] JFIT: Loading = 0.60, Communality = 0.62
            [B.5.5] Cronbach’s Alpha = 0.88
     [B.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [B.6.1] ORGN: Loading = 1.18, Communality = 0.96
            [B.6.2] COMM: Loading = 0.99, Communality = 0.80
            [B.6.3] CFIT: Loading = 0.47, Communality = 0.62
            [B.6.4] LIKE: Loading = 0.41, Communality = 0.44
            [B.6.5] APPR: Loading = 0.40, Communality = 0.46
            [B.6.6] SCON: Loading = 0.35, Communality = 0.51
            [B.6.7] Cronbach’s Alpha = 0.88
     [B.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [B.7.1] RESM: Loading = 1.06, Communality = 0.83
            [B.7.2] LETT: Loading = 0.87, Communality = 0.71
            [B.7.3] Cronbach’s Alpha = 0.91
     [B.8] Correlation between factors ranged from 0.58 to 0.67

[C] Results for the exploratory factor analysis using a 4-Factor Structure were as follows:
     [C.1] Standardized Root Mean Square of the Residual = 0.06
     [C.2] Tucker-Lewis Fit Index = 0.76
     [C.3] Bayesian Information Criterion = -37.51
     [C.4] High Residual Rate = 0.15
     [C.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [C.5.1] JFIT: Loading = 1.04, Communality = 0.91
            [C.5.2] CFIT: Loading = 0.91, Communality = 0.85
            [C.5.3] POTL: Loading = 0.70, Communality = 0.65
            [C.5.4] EXPR: Loading = 0.47, Communality = 0.46
            [C.5.5] ACAD: Loading = 0.44, Communality = 0.45
            [C.5.6] Cronbach’s Alpha = 0.90
     [C.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [C.6.1] SCON: Loading = 0.93, Communality = 0.78
            [C.6.2] APPR: Loading = 0.80, Communality = 0.68
            [C.6.3] LIKE: Loading = 0.70, Communality = 0.65
            [C.6.4] Cronbach’s Alpha = 0.87
     [C.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [C.7.1] ORGN: Loading = 0.99, Communality = 0.97
            [C.7.2] COMM: Loading = 0.90, Communality = 0.79
            [C.7.3] Cronbach’s Alpha = 0.92
     [C.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [C.8.1] RESM: Loading = 0.89, Communality = 1.00
            [C.8.2] LETT: Loading = 0.76, Communality = 0.78
            [C.8.3] Cronbach’s Alpha = 0.91
     [C.9] Correlation between factors ranged from 0.27 to 0.66

[D] Results for the exploratory factor analysis using a 5-Factor Structure were as follows:
     [D.1] Standardized Root Mean Square of the Residual = 0.02
     [D.2] Tucker-Lewis Fit Index = 0.99
     [D.3] Bayesian Information Criterion = -45.32
     [D.4] High Residual Rate = 0.03
     [D.5] Factor 1 was a latent variable with higher loading towards the following descriptors:
            [D.5.1] ACAD: Loading = 0.95, Communality = 0.78
            [D.5.2] POTL: Loading = 0.82, Communality = 0.87
            [D.5.3] EXPR: Loading = 0.73, Communality = 0.64
            [C.5.4] Cronbach’s Alpha = 0.89
     [D.6] Factor 2 was a latent variable with higher loading towards the following descriptors:
            [D.6.1] SCON: Loading = 1.02, Communality = 0.87
            [D.6.2] LIKE: Loading = 0.76, Communality = 0.68
            [D.6.3] APPR: Loading = 0.64, Communality = 0.65
            [C.6.4] Cronbach’s Alpha = 0.87
     [D.7] Factor 3 was a latent variable with higher loading towards the following descriptors:
            [D.7.1] ORGN: Loading = 0.96, Communality = 0.96
            [D.7.2] COMM: Loading = 0.85, Communality = 0.80
            [C.7.3] Cronbach’s Alpha = 0.92
     [D.8] Factor 4 was a latent variable with higher loading towards the following descriptors:
            [D.8.1] RESM: Loading = 0.93, Communality = 1.00
            [D.8.2] LETT: Loading = 0.79, Communality = 0.77
            [C.8.3] Cronbach’s Alpha = 0.91
     [D.9] Factor 5 was a latent variable with higher loading towards the following descriptors:
            [D.9.1] JFIT: Loading = 0.96, Communality = 0.95
            [D.9.2] CFIT: Loading = 0.87, Communality = 0.85
            [C.9.3] Cronbach’s Alpha = 0.94
     [D.10] Correlation between factors ranged from 0.39 to 0.62

Code Chunk | Output
##################################
# Implementing various procedures for determining
# factor retention based on
# the maximum consensus between methods
##################################
(FA_ML_P_MethodAgreementProcedure <- parameters::n_factors(DPA.Descriptors.Numeric,
                                                           algorithm = "mle",
                                                           rotation = "promax"))
## # Method Agreement Procedure:
## 
## The choice of 4 dimensions is supported by 5 (26.32%) methods out of 19 (Bentler, beta, Parallel analysis, Kaiser criterion, Scree (SE)).
as.data.frame(FA_ML_P_MethodAgreementProcedure)
##    n_Factors              Method              Family
## 1          1 Acceleration factor               Scree
## 2          1          Scree (R2)            Scree_SE
## 3          1    VSS complexity 1                 VSS
## 4          2 Optimal coordinates               Scree
## 5          2    VSS complexity 2                 VSS
## 6          3                 CNG                 CNG
## 7          4             Bentler             Bentler
## 8          4                beta Multiple_regression
## 9          4   Parallel analysis               Scree
## 10         4    Kaiser criterion               Scree
## 11         4          Scree (SE)            Scree_SE
## 12         5       Velicer's MAP        Velicers_MAP
## 13         5                 BIC                 BIC
## 14         6            Bartlett             Barlett
## 15         6                   t Multiple_regression
## 16         6                   p Multiple_regression
## 17         6      BIC (adjusted)                 BIC
## 18         7            Anderson             Barlett
## 19         7              Lawley             Barlett
##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Promax rotation
# with 3 factors
##################################
(FA_ML_P_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="ml",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        ML3   ML2   ML1   h2    u2 com
## ACAD  0.88 -0.04 -0.05 0.67 0.326 1.0
## APPR  0.19  0.40  0.19 0.46 0.543 1.9
## COMM -0.20  0.99  0.05 0.80 0.203 1.1
## CFIT  0.44  0.47 -0.05 0.62 0.377 2.0
## EXPR  0.85 -0.32  0.17 0.61 0.385 1.4
## JFIT  0.60  0.28 -0.04 0.62 0.379 1.4
## LETT -0.08  0.04  0.87 0.71 0.289 1.0
## LIKE  0.19  0.41  0.15 0.44 0.563 1.7
## ORGN -0.20  1.18 -0.18 0.96 0.043 1.1
## POTL  1.08 -0.02 -0.18 0.92 0.079 1.1
## RESM -0.02 -0.10  1.06 1.00 0.005 1.0
## SCON  0.28  0.35  0.09 0.40 0.597 2.1
## 
##                        ML3  ML2  ML1
## SS loadings           3.27 3.05 1.89
## Proportion Var        0.27 0.25 0.16
## Cumulative Var        0.27 0.53 0.68
## Proportion Explained  0.40 0.37 0.23
## Cumulative Proportion 0.40 0.77 1.00
## 
##  With factor correlations of 
##      ML3  ML2  ML1
## ML3 1.00 0.67 0.64
## ML2 0.67 1.00 0.58
## ML1 0.64 0.58 1.00
## 
## Mean item complexity =  1.4
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.22 
## 
## The root mean square of the residuals (RMSR) is  0.08 
## The df corrected root mean square of the residuals is  0.11 
## 
## The harmonic number of observations is  50 with the empirical chi square  41.84  with prob <  0.14 
## The total number of observations was  50  with Likelihood Chi Square =  93.49  with prob <  1.1e-07 
## 
## Tucker Lewis Index of factoring reliability =  0.686
## RMSEA index =  0.19  and the 90 % confidence intervals are  0.148 0.24
## BIC =  -35.6
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    ML3  ML2  ML1
## Correlation of (regression) scores with factors   0.98 0.99 1.00
## Multiple R square of scores with factors          0.96 0.97 1.00
## Minimum correlation of possible factor scores     0.91 0.95 0.99
(FA_ML_P_3F_Summary <- FA_ML_P_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | ML3  | ML2  | ML1  | Complexity | Uniqueness
## -------------------------------------------------------
## POTL     | 1.08 |      |      |    1.06    |    0.08   
## ACAD     | 0.88 |      |      |    1.01    |    0.33   
## EXPR     | 0.85 |      |      |    1.36    |    0.39   
## JFIT     | 0.60 |      |      |    1.44    |    0.38   
## ORGN     |      | 1.18 |      |    1.10    |    0.04   
## COMM     |      | 0.99 |      |    1.09    |    0.20   
## CFIT     |      | 0.47 |      |    2.02    |    0.38   
## LIKE     |      | 0.41 |      |    1.70    |    0.56   
## APPR     |      | 0.40 |      |    1.90    |    0.54   
## SCON     |      | 0.35 |      |    2.08    |    0.60   
## RESM     |      |      | 1.06 |    1.02    |  4.98e-03 
## LETT     |      |      | 0.87 |    1.02    |    0.29   
## 
## The 3 latent factors (promax rotation) accounted for 68.42% of the total variance of the original data (ML3 = 27.29%, ML2 = 25.39%, ML1 = 15.75%).
summary(FA_ML_P_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML2 |   ML1
## -------------------------------------------------------
## Eigenvalues                     | 6.079 | 1.261 | 0.922
## Variance Explained              | 0.273 | 0.254 | 0.157
## Variance Explained (Cumulative) | 0.273 | 0.527 | 0.684
## Variance Explained (Proportion) | 0.399 | 0.371 | 0.230
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_P_3F_Residual <- residuals(FA_ML_P_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.02    NA                                                      
## COMM  0.04 -0.04    NA                                                
## CFIT -0.07 -0.10 -0.01    NA                                          
## EXPR  0.05 -0.07 -0.02 -0.06    NA                                    
## JFIT -0.08 -0.09 -0.02  0.27  0.00    NA                              
## LETT -0.06 -0.14 -0.02  0.05  0.06  0.06    NA                        
## LIKE -0.04  0.19 -0.04 -0.02 -0.06  0.04 -0.06    NA                  
## ORGN  0.00  0.00  0.00 -0.01  0.01 -0.01  0.01 -0.01    NA            
## POTL  0.01  0.01  0.00  0.00  0.00 -0.01  0.00 -0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.04  0.27 -0.05 -0.03  0.03 -0.02 -0.15  0.34  0.00 -0.01  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_P_3F_RMS <- FA_ML_P_3F$rms)
## [1] 0.07961754
(FA_ML_P_3F_TLI <- FA_ML_P_3F$TLI)
## [1] 0.6858498
(FA_ML_P_3F_BIC <- FA_ML_P_3F$BIC)
## [1] -35.60434
(FA_ML_P_3F_MaxResidual   <- max(abs(FA_ML_P_3F_Residual),na.rm=TRUE))
## [1] 0.3363878
(FA_ML_P_3F_HighResidual  <- sum(FA_ML_P_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 16
(FA_ML_P_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_P_3F_HighResidualRate <- FA_ML_P_3F_HighResidual/FA_ML_P_3F_TotalResidual)
## [1] 0.2424242
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Promax Rotation : 3 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","ACAD","EXPR","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "ACAD", "EXPR", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_P_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 3,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_P_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Promax rotation
# with 4 factors
##################################
(FA_ML_P_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="ml",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        ML3   ML4   ML1   ML2   h2    u2 com
## ACAD  0.44  0.26  0.07 -0.03 0.45 0.546 1.7
## APPR -0.13  0.80  0.07  0.15 0.68 0.325 1.1
## COMM  0.03  0.10  0.16  0.76 0.79 0.206 1.1
## CFIT  0.91 -0.18 -0.04  0.28 0.85 0.148 1.3
## EXPR  0.47  0.16  0.22 -0.24 0.46 0.535 2.2
## JFIT  1.04 -0.16 -0.07  0.11 0.91 0.089 1.1
## LETT  0.06 -0.21  0.90  0.14 0.78 0.224 1.2
## LIKE  0.09  0.70 -0.02  0.11 0.65 0.350 1.1
## ORGN  0.08  0.16 -0.06  0.89 0.97 0.027 1.1
## POTL  0.70  0.22 -0.06 -0.04 0.65 0.347 1.2
## RESM -0.12  0.15  0.99 -0.03 1.00 0.005 1.1
## SCON  0.01  0.93 -0.12  0.01 0.78 0.220 1.0
## 
##                        ML3  ML4  ML1  ML2
## SS loadings           2.93 2.36 1.85 1.84
## Proportion Var        0.24 0.20 0.15 0.15
## Cumulative Var        0.24 0.44 0.60 0.75
## Proportion Explained  0.33 0.26 0.21 0.20
## Cumulative Proportion 0.33 0.59 0.80 1.00
## 
##  With factor correlations of 
##      ML3  ML4  ML1  ML2
## ML3 1.00 0.66 0.60 0.40
## ML4 0.66 1.00 0.53 0.41
## ML1 0.60 0.53 1.00 0.27
## ML2 0.40 0.41 0.27 1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.36 
## 
## The root mean square of the residuals (RMSR) is  0.06 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  22.17  with prob <  0.57 
## The total number of observations was  50  with Likelihood Chi Square =  56.38  with prob <  2e-04 
## 
## Tucker Lewis Index of factoring reliability =  0.764
## RMSEA index =  0.163  and the 90 % confidence intervals are  0.11 0.223
## BIC =  -37.51
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    ML3  ML4  ML1  ML2
## Correlation of (regression) scores with factors   0.98 0.95 1.00 0.98
## Multiple R square of scores with factors          0.95 0.90 0.99 0.97
## Minimum correlation of possible factor scores     0.90 0.81 0.99 0.93
(FA_ML_P_4F_Summary <- FA_ML_P_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | ML3  | ML4  | ML1  | ML2  | Complexity | Uniqueness
## --------------------------------------------------------------
## JFIT     | 1.04 |      |      |      |    1.08    |    0.09   
## CFIT     | 0.91 |      |      |      |    1.27    |    0.15   
## POTL     | 0.70 |      |      |      |    1.22    |    0.35   
## EXPR     | 0.47 |      |      |      |    2.21    |    0.54   
## ACAD     | 0.44 |      |      |      |    1.67    |    0.55   
## SCON     |      | 0.93 |      |      |    1.04    |    0.22   
## APPR     |      | 0.80 |      |      |    1.14    |    0.32   
## LIKE     |      | 0.70 |      |      |    1.08    |    0.35   
## RESM     |      |      | 0.99 |      |    1.08    |  5.00e-03 
## LETT     |      |      | 0.90 |      |    1.18    |    0.22   
## ORGN     |      |      |      | 0.89 |    1.09    |    0.03   
## COMM     |      |      |      | 0.76 |    1.13    |    0.21   
## 
## The 4 latent factors (promax rotation) accounted for 74.82% of the total variance of the original data (ML3 = 24.45%, ML4 = 19.64%, ML1 = 15.41%, ML2 = 15.32%).
summary(FA_ML_P_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML4 |   ML1 |   ML2
## ---------------------------------------------------------------
## Eigenvalues                     | 6.146 | 1.248 | 0.890 | 0.846
## Variance Explained              | 0.245 | 0.196 | 0.154 | 0.153
## Variance Explained (Cumulative) | 0.245 | 0.441 | 0.595 | 0.748
## Variance Explained (Proportion) | 0.327 | 0.263 | 0.206 | 0.205
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_P_4F_Residual <- residuals(FA_ML_P_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.05 -0.01    NA                                                
## CFIT -0.04  0.00  0.00    NA                                          
## EXPR  0.24 -0.05 -0.02 -0.08    NA                                    
## JFIT -0.04  0.00  0.00  0.01 -0.01    NA                              
## LETT -0.04 -0.03 -0.03 -0.01  0.06  0.00    NA                        
## LIKE -0.08 -0.01  0.00 -0.01 -0.09  0.03  0.04    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.26  0.03  0.02 -0.02  0.20 -0.02  0.00 -0.05  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.08 -0.01 -0.01  0.02  0.00  0.00 -0.01  0.05  0.00 -0.05  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_P_4F_RMS <- FA_ML_P_4F$rms)
## [1] 0.05795189
(FA_ML_P_4F_TLI <- FA_ML_P_4F$TLI)
## [1] 0.7644223
(FA_ML_P_4F_BIC <- FA_ML_P_4F$BIC)
## [1] -37.50857
(FA_ML_P_4F_MaxResidual   <- max(abs(FA_ML_P_4F_Residual),na.rm=TRUE))
## [1] 0.2590579
(FA_ML_P_4F_HighResidual  <- sum(FA_ML_P_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_ML_P_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_P_4F_HighResidualRate <- FA_ML_P_4F_HighResidual/FA_ML_P_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Promax Rotation : 4 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT","POTL","EXPR","ACAD")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT", "POTL", 
##     "EXPR", "ACAD")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##        0.9       0.9    0.92      0.64 8.8 0.024  7.2 1.2     0.66
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84   0.9  0.94
## Duhachek  0.85   0.9  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.86      0.87    0.86      0.62 6.5    0.034 0.021  0.66
## CFIT      0.88      0.88    0.87      0.66 7.6    0.028 0.011  0.69
## POTL      0.85      0.85    0.88      0.58 5.6    0.036 0.029  0.53
## EXPR      0.89      0.89    0.91      0.68 8.5    0.025 0.022  0.68
## ACAD      0.88      0.88    0.90      0.64 7.3    0.029 0.028  0.68
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.88  0.87  0.86   0.80  7.0 1.6
## CFIT 50  0.84  0.82  0.80   0.72  6.9 1.6
## POTL 50  0.91  0.92  0.90   0.85  7.3 1.4
## EXPR 50  0.76  0.78  0.71   0.64  7.3 1.4
## ACAD 50  0.81  0.83  0.78   0.72  7.4 1.3
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_P_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 4,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_P_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Promax rotation
# with 5 factors
##################################
(FA_ML_P_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="ml",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        ML5   ML4   ML2   ML3   ML1   h2    u2 com
## ACAD  0.95 -0.06  0.13 -0.10 -0.04 0.78 0.218 1.1
## APPR  0.15  0.64  0.18 -0.17  0.07 0.65 0.353 1.5
## COMM  0.02 -0.02  0.85  0.00  0.12 0.80 0.196 1.0
## CFIT  0.03  0.00  0.16  0.79  0.03 0.85 0.154 1.1
## EXPR  0.73  0.02 -0.19  0.06  0.15 0.64 0.362 1.2
## JFIT  0.07  0.04 -0.05  0.93  0.02 0.95 0.050 1.0
## LETT -0.03 -0.15  0.09  0.10  0.87 0.77 0.229 1.1
## LIKE -0.09  0.76  0.02  0.15  0.03 0.68 0.319 1.1
## ORGN -0.04  0.06  0.96  0.06 -0.09 0.96 0.035 1.0
## POTL  0.82  0.04  0.03  0.20 -0.12 0.87 0.132 1.2
## RESM  0.03  0.17 -0.08 -0.08  0.96 1.00 0.005 1.1
## SCON -0.03  1.02 -0.09  0.03 -0.09 0.87 0.130 1.0
## 
##                        ML5  ML4  ML2  ML3  ML1
## SS loadings           2.23 2.15 1.87 1.80 1.77
## Proportion Var        0.19 0.18 0.16 0.15 0.15
## Cumulative Var        0.19 0.36 0.52 0.67 0.82
## Proportion Explained  0.23 0.22 0.19 0.18 0.18
## Cumulative Proportion 0.23 0.45 0.64 0.82 1.00
## 
##  With factor correlations of 
##      ML5  ML4  ML2  ML3  ML1
## ML5 1.00 0.57 0.39 0.62 0.53
## ML4 0.57 1.00 0.58 0.51 0.46
## ML2 0.39 0.58 1.00 0.56 0.40
## ML3 0.62 0.51 0.56 1.00 0.47
## ML1 0.53 0.46 0.40 0.47 1.00
## 
## Mean item complexity =  1.1
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.42 
## 
## The root mean square of the residuals (RMSR) is  0.02 
## The df corrected root mean square of the residuals is  0.04 
## 
## The harmonic number of observations is  50 with the empirical chi square  2.44  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  17.27  with prob <  0.37 
## 
## Tucker Lewis Index of factoring reliability =  0.986
## RMSEA index =  0.034  and the 90 % confidence intervals are  0 0.141
## BIC =  -45.32
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    ML5  ML4  ML2  ML3  ML1
## Correlation of (regression) scores with factors   0.96 0.96 0.98 0.98 1.00
## Multiple R square of scores with factors          0.92 0.93 0.97 0.96 0.99
## Minimum correlation of possible factor scores     0.85 0.85 0.94 0.92 0.98
(FA_ML_P_5F_Summary <- FA_ML_P_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | ML5  | ML4  | ML2  | ML3  | ML1  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.95 |      |      |      |      |    1.07    |    0.22   
## POTL     | 0.82 |      |      |      |      |    1.17    |    0.13   
## EXPR     | 0.73 |      |      |      |      |    1.24    |    0.36   
## SCON     |      | 1.02 |      |      |      |    1.03    |    0.13   
## LIKE     |      | 0.76 |      |      |      |    1.12    |    0.32   
## APPR     |      | 0.64 |      |      |      |    1.45    |    0.35   
## ORGN     |      |      | 0.96 |      |      |    1.04    |    0.04   
## COMM     |      |      | 0.85 |      |      |    1.04    |    0.20   
## JFIT     |      |      |      | 0.93 |      |    1.02    |    0.05   
## CFIT     |      |      |      | 0.79 |      |    1.09    |    0.15   
## RESM     |      |      |      |      | 0.96 |    1.09    |  4.99e-03 
## LETT     |      |      |      |      | 0.87 |    1.11    |    0.23   
## 
## The 5 latent factors (promax rotation) accounted for 81.81% of the total variance of the original data (ML5 = 18.55%, ML4 = 17.95%, ML2 = 15.60%, ML3 = 15.00%, ML1 = 14.72%).
summary(FA_ML_P_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML5 |   ML4 |   ML2 |   ML3 |   ML1
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.215 | 1.301 | 0.958 | 0.877 | 0.477
## Variance Explained              | 0.185 | 0.179 | 0.156 | 0.150 | 0.147
## Variance Explained (Cumulative) | 0.185 | 0.365 | 0.521 | 0.671 | 0.818
## Variance Explained (Proportion) | 0.227 | 0.219 | 0.191 | 0.183 | 0.180
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_P_5F_Residual <- residuals(FA_ML_P_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.02 -0.01    NA                                                
## CFIT  0.00  0.00  0.00    NA                                          
## EXPR  0.00 -0.07 -0.03 -0.05    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.04 -0.04 -0.03 -0.01  0.07  0.00    NA                        
## LIKE  0.01  0.01  0.01 -0.03 -0.04  0.01  0.03    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.00  0.01  0.00  0.01  0.01  0.00  0.01  0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.01 -0.01  0.00  0.01  0.04  0.00 -0.01  0.00  0.00  0.00  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_P_5F_RMS <- FA_ML_P_5F$rms)
## [1] 0.01923904
(FA_ML_P_5F_TLI <- FA_ML_P_5F$TLI)
## [1] 0.9858829
(FA_ML_P_5F_BIC <- FA_ML_P_5F$BIC)
## [1] -45.32318
(FA_ML_P_5F_MaxResidual   <- max(abs(FA_ML_P_5F_Residual),na.rm=TRUE))
## [1] 0.0733741
(FA_ML_P_5F_HighResidual  <- sum(FA_ML_P_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 2
(FA_ML_P_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_P_5F_HighResidualRate <- FA_ML_P_5F_HighResidual/FA_ML_P_5F_TotalResidual)
## [1] 0.03030303
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Promax Rotation : 5 Factors",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_P_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 5,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_P_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_ML_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Promax Rotation : 3 Factors",
           cex=0.75)
fa.diagram(FA_ML_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Promax Rotation : 4 Factors",
           cex=0.75)
fa.diagram(FA_ML_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Maximum Likelihood Factor Extraction + Promax Rotation : 5 Factors",
           cex=0.75)

1.7 Algorithm Comparison Summary


[A] Among candidates, optimal results were obtained for the exploratory factor analysis with 5-Factor Structure by demonstrating excellent model fit metrics. In addition, the latent variables obtained were contextually meaningful as individual factors in the analysis.
     [A.1] Lowest Standardized Root Mean Square of the Residual
     [A.2] Highest Tucker-Lewis Fit Index
     [A.3] Lowest Bayesian Information Criterion
     [A.4] Lowest High Residual Rate

[B] Among candidates, minimal errors were obtained for the exploratory factor analysis with Principal Axes factor extraction by demonstrating the:
     [A.1] Lowest Standardized Root Mean Square of the Residual
     [A.2] Lowest High Residual Rate

[C] Among candidates, the exploratory factor analysis with Promax rotation was more appropriate due to the presence of considerable correlation among the extract factors.

[D] The selected exploratory factor analysis model demonstrated highly consistent factors described as follows:
     [D.1] Factor 1 corresponds to the academic and professional background of the candidate.
            [D.1.1] ACAD (Academic Record)
            [D.1.2] POTL (Potential)
            [D.1.3] EXPR (Experience)
     [D.2] Factor 2 corresponds to the candidate’s personality.
            [D.2.1] SCON (Self-Confidence)
            [D.2.2] LIKE (Likeability)
            [D.2.3] APPR (Appearance)
     [D.3] Factor 3 corresponds to the candidate’s soft skills.
            [D.3.1] COMM (Communication)
            [D.3.2] ORGN (Organization)
     [D.4] Factor 4 corresponds to the candidate’s presentation of skills and qualifications during application.
            [D.4.1] LETT (Cover Letter)
            [D.4.2] RESM (Resume)
     [D.5] Factor 5 corresponds to the candidate’s overall fit to the company and job.
            [D.5.1] JFIT (Job Fit)
            [D.5.2] CFIT (Company Fit)

Code Chunk | Output
##################################
# Consolidating the fit indices
##################################
FA_RMSSummary <- c(FA_PA_V_3F_RMS,
                   FA_PA_V_4F_RMS,
                   FA_PA_V_5F_RMS,
                   FA_PA_P_3F_RMS,
                   FA_PA_P_4F_RMS,
                   FA_PA_P_5F_RMS,
                   FA_ML_V_3F_RMS,
                   FA_ML_V_4F_RMS,
                   FA_ML_V_5F_RMS,
                   FA_ML_P_3F_RMS,
                   FA_ML_P_4F_RMS,
                   FA_ML_P_5F_RMS)

FA_TLISummary <- c(FA_PA_V_3F_TLI,
                   FA_PA_V_4F_TLI,
                   FA_PA_V_5F_TLI,
                   FA_PA_P_3F_TLI,
                   FA_PA_P_4F_TLI,
                   FA_PA_P_5F_TLI,
                   FA_ML_V_3F_TLI,
                   FA_ML_V_4F_TLI,
                   FA_ML_V_5F_TLI,
                   FA_ML_P_3F_TLI,
                   FA_ML_P_4F_TLI,
                   FA_ML_P_5F_TLI)

FA_BICSummary <- c(FA_PA_V_3F_BIC,
                   FA_PA_V_4F_BIC,
                   FA_PA_V_5F_BIC,
                   FA_PA_P_3F_BIC,
                   FA_PA_P_4F_BIC,
                   FA_PA_P_5F_BIC,
                   FA_ML_V_3F_BIC,
                   FA_ML_V_4F_BIC,
                   FA_ML_V_5F_BIC,
                   FA_ML_P_3F_BIC,
                   FA_ML_P_4F_BIC,
                   FA_ML_P_5F_BIC)

FA_HighResidualRateSummary <- c(FA_PA_V_3F_HighResidualRate,
                                FA_PA_V_4F_HighResidualRate,
                                FA_PA_V_5F_HighResidualRate,
                                FA_PA_P_3F_HighResidualRate,
                                FA_PA_P_4F_HighResidualRate,
                                FA_PA_P_5F_HighResidualRate,
                                FA_ML_V_3F_HighResidualRate,
                                FA_ML_V_4F_HighResidualRate,
                                FA_ML_V_5F_HighResidualRate,
                                FA_ML_P_3F_HighResidualRate,
                                FA_ML_P_4F_HighResidualRate,
                                FA_ML_P_5F_HighResidualRate)

FA_AlgorithmSummary <- c("FA_PA_V_3F",
                         "FA_PA_V_4F",
                         "FA_PA_V_5F",
                         "FA_PA_P_3F",
                         "FA_PA_P_4F",
                         "FA_PA_P_5F",
                         "FA_ML_V_3F",
                         "FA_ML_V_4F",
                         "FA_ML_V_5F",
                         "FA_ML_P_3F",
                         "FA_ML_P_4F",
                         "FA_ML_P_5F")

FA_Summary <- cbind(FA_RMSSummary,
                    FA_TLISummary,
                    FA_BICSummary,
                    FA_HighResidualRateSummary,
                    FA_AlgorithmSummary)

FA_Summary <- as.data.frame(FA_Summary)
names(FA_Summary) <- c("RMS",
                       "TLI",
                       "BIC",
                       "HighResidualRate",
                       "Algorithm")

FA_Summary$RMS <- as.numeric(as.character(FA_Summary$RMS))
FA_Summary$TLI <- as.numeric(as.character(FA_Summary$TLI))
FA_Summary$BIC <- as.numeric(as.character(FA_Summary$BIC))
FA_Summary$HighResidualRate <- as.numeric(as.character(FA_Summary$HighResidualRate))

FA_Summary$Algorithm <- factor(FA_Summary$Algorithm ,
                                        levels = c("FA_PA_V_3F",
                                                   "FA_PA_V_4F",
                                                   "FA_PA_V_5F",
                                                   "FA_PA_P_3F",
                                                   "FA_PA_P_4F",
                                                   "FA_PA_P_5F",
                                                   "FA_ML_V_3F",
                                                   "FA_ML_V_4F",
                                                   "FA_ML_V_5F",
                                                   "FA_ML_P_3F",
                                                   "FA_ML_P_4F",
                                                   "FA_ML_P_5F"))

print(FA_Summary, row.names=FALSE)
##         RMS       TLI       BIC HighResidualRate  Algorithm
##  0.07338105 0.6191606 -22.76274       0.27272727 FA_PA_V_3F
##  0.03861068 0.7317578 -33.01886       0.15151515 FA_PA_V_4F
##  0.01483907 0.9648451 -43.43181       0.00000000 FA_PA_V_5F
##  0.07338105 0.6191606 -22.76274       0.27272727 FA_PA_P_3F
##  0.03861068 0.7317578 -33.01886       0.15151515 FA_PA_P_4F
##  0.01483907 0.9648451 -43.43181       0.00000000 FA_PA_P_5F
##  0.07961754 0.6858498 -35.60434       0.24242424 FA_ML_V_3F
##  0.05795189 0.7644223 -37.50857       0.15151515 FA_ML_V_4F
##  0.01923904 0.9858829 -45.32318       0.03030303 FA_ML_V_5F
##  0.07961754 0.6858498 -35.60434       0.24242424 FA_ML_P_3F
##  0.05795189 0.7644223 -37.50857       0.15151515 FA_ML_P_4F
##  0.01923904 0.9858829 -45.32318       0.03030303 FA_ML_P_5F
##################################
# Consolidating all calculated values
# for the Standardized Root Mean Square of the Residual
##################################
(RMS_Plot <- dotplot(Algorithm ~ RMS,
                     data = FA_Summary,
                     main = "Algorithm Comparison : Standardized Root Mean Square of the Residual",
                     ylab = "Algorithm",
                     xlab = "RMSR",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

##################################
# Consolidating all calculated values
# for the Tucker-Lewis Fit Index
##################################
(TLI_Plot <- dotplot(Algorithm ~ TLI,
                     data = FA_Summary,
                     main = "Algorithm Comparison : Tucker-Lewis Fit Index",
                     ylab = "Algorithm",
                     xlab = "TLI",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

##################################
# Consolidating all calculated values
# for the Bayesian Information Criterion
##################################
(BIC_Plot <- dotplot(Algorithm ~ BIC,
                     data = FA_Summary,
                     main = "Algorithm Comparison : Bayesian Information Criterion",
                     ylab = "Algorithm",
                     xlab = "BIC",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

##################################
# Consolidating all calculated values
# for the High Residual Rate
##################################
(HighResidualRate_Plot <- dotplot(Algorithm ~ HighResidualRate,
                     data = FA_Summary,
                     main = "Algorithm Comparison : High Residual Rate ",
                     ylab = "Algorithm",
                     xlab = "High Residual Rate",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

##################################
# Plotting the Factor Loading Diagram
# for the optimal EFA model
##################################
fa.diagram(FA_PA_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="Principal Axes Factor Extraction + Promax Rotation : 5 Factors",
           cex=0.75)

##################################
# Plotting the Dandelion Plot
# for the optimal EFA model
##################################
dandelion(FA_PA_P_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

2. References


[Book] Multiple Factor Analysis by Example Using R by Jerome Pages
[Book] Nonlinear Principal Component Analysis and Its Applications by Yuichi Mori, Masahiro Kuroda and Naomichi Makino
[Book] Applied Predictive Modeling by Max Kuhn and Kjell Johnson
[Book] An Introduction to Statistical Learning by Gareth James, Daniela Witten, Trevor Hastie and Rob Tibshirani
[Book] Multivariate Data Visualization with R by Deepayan Sarkar
[Book] Machine Learning by Samuel Jackson
[Book] Data Modeling Methods by Jacob Larget
[Book] Introduction to R and Statistics by University of Western Australia
[Book] Feature Engineering and Selection: A Practical Approach for Predictive Models by Max Kuhn and Kjell Johnson
[Book] Introduction to Research Methods by Eric van Holm
[Book] A Step-by-Step Guide to Exploratory Factor Analysis with R and RStudio by Marley Watkins
[R Package] AppliedPredictiveModeling by Max Kuhn
[R Package] caret by Max Kuhn
[R Package] rpart by Terry Therneau and Beth Atkinson
[R Package] lattice by Deepayan Sarkar
[R Package] dplyr by Hadley Wickham
[R Package] moments by Lukasz Komsta and Frederick
[R Package] skimr by Elin Waring
[R Package] RANN by Sunil Arya, David Mount, Samuel Kemp and Gregory Jefferis
[R Package] corrplot by Taiyun Wei
[R Package] tidyverse by Hadley Wickham
[R Package] lares by Bernardo Lares
[R Package] DMwR by Luis Torgo
[R Package] gridExtra by Baptiste Auguie and Anton Antonov
[R Package] rattle by Graham Williams
[R Package] RColorBrewer by Erich Neuwirth
[R Package] stats by R Core Team
[R Package] factoextra by Alboukadel Kassambara and Fabian Mundt
[R Package] FactoMineR by Francois Husson, Julie Josse, Sebastien Le and Jeremy Mazet
[R Package] gplots by Tal Galili
[R Package] qgraph by Sacha Epskamp
[R Package] ggplot2 by Hadley Wickham, Winston Chang, Lionel Henry and Thomas Lin Pedersen
[R Package] psych by William Revelle
[R Package] nFactors by Gilles Raiche and David Magis
[R Package] MBESS by Ken Kelley
[R Package] DandEFA by Artur Manukyan, Ahmet Sedef, Erhan Cene and Ibrahim Demir
[R Package] EFAtools by Markus Steiner and Silvia Grieder
[R Package] parameters by Daniel Ludecke
[R Package] performance by Daniel Ludecke
[Article] 6 Dimensionality Reduction Techniques in R (with Examples) by CMDLineTips Team
[Article] 6 Dimensionality Reduction Algorithms With Python by Jason Brownlee
[Article] Introduction to Dimensionality Reduction for Machine Learning by Jason Brownlee
[Article] Introduction to Dimensionality Reduction by Geeks For Geeks
[Article] Factor Analysis with the psych package by Michael Clark
[Article] Factor Analysis in R with Psych Package: Measuring Consumer Involvement by Peter Prevos
[Article] Factor Analysis in R by Jinjian Mu
[Article] How To: Use the psych package for Factor Analysis and Data Reduction by William Revelle
[Article] A Practical Introduction to Factor Analysis: Exploratory Factor Analysis by UCLA Advanced Research Computing Team
[Article] Examining the Big 5 Personality Dataset with Factor Analysis by Tarid Wongvorachan
[Article] Principal Component Analysis versus Exploratory Factor Analysis by Diana Suhr
[Article] Exploratory Factor Analysis by Columbia University Irving Medical Center
[Article] Factor Analysis Example by Charles Zaiontz
[Article] Factor Analysis Guide with an Example by Jim Frost
[Article] What Is Factor Analysis and How Does It Simplify Research Findings? by Qualtrics Team
[Article] How Can I Perform A Factor Analysis With Categorical (Or Categorical And Continuous) Variables? by UCLA Advanced Research Computing Team
[Article] Factor Analysis on Ordinal Data Example in R (psych, homals) by Jiayu Wu
[Article] Factor Analysis by HandWiki Team
[Article] On Likert Scales In R by Jake Chanenson
[Publication] General Intelligence Objectively Determined and Measured by Charles Spearman (The American Journal of Psychology)
[Publication] The Effect of Standardization on a Chi-Square Approximation in Factor Analysis by Maurice Bartlett (Psychometrika)
[Publication] A Second Generation Little Jiffy by Henry Kaiser (Psychometrika)
[Publication] Tests of Significance in Factor Analysis by Maurice Bartlett (British Journal of Statistical Psychology)
[Publication] Test of Linear Trend in Eigenvalues of a Covariance Matrix with Application to Data Analysis by Peter Bentler and KeHai Yuan (British Journal of Mathematical and Statistical Psychology)
[Publication] The Scree Test For The Number Of Factors by Raymond Cattell (Multivariate Behavioral Research)
[Publication] Using Fit Statistic Differences to Determine the Optimal Number of Factors to Retain in an Exploratory Factor Analysis by William Finch (Educational and Psychological Measurement)
[Publication] An Objective Counterpart to the Visual Scree Test for Factor Analysis: The Standard Error Scree by Keith Zoski and Stephen Jurs (Educational and Psychological Measurement)
[Publication] The Performance of Regression-Based Variations of the Visual Scree for Determining the Number of Common Factors by Fadia Nasser, Jeri Benson and Joseph Wisenbaker (Educational and Psychological Measurement)
[Publication] Investigating the Performance of Exploratory Graph Analysis and Traditional Techniques to Identify the Number of Latent Factors: A Simulation and Tutorial by Hudson Golino, Dingjing Shi, Alexander Christensen, Luis Garrido, Maria Nieto, Ritu Sadana, Jotheeswaran Thiyagarajan, Agustin Martinez-Molina (Psychological Methods)
[Publication] Exploratory Graph Analysis: A New Approach for Estimating the Number of Dimensions in Psychological Research by Hudson Galino and Sacha Epskamp (Plos One)
[Publication] Very Simple Structure: An Alternative Procedure For Estimating The Optimal Number Of Interpretable Factors by William Revelle and Thomas Rocklin (Multivariate Behavioral Research )
[Publication] Determining the Number of Components from the Matrix of Partial Correlations by Wayne Velicer (Psychometrika)
[Publication] Dandelion Plot: A Method for the Visualization of R-mode Exploratory Factor Analyses by Artur Manukyan, Erhan Cene, Ahmet Sedef and Ibrahim Demir (Computational Statistics)
[Course] Applied Data Mining and Statistical Learning by Penn State Eberly College of Science